以前我已经作过一个利用cropper裁剪而且制做头像的功能。如何在mui app中实现相册或相机获取图片后裁剪作头像请看另外一篇博客:mui开发app之cropper裁剪后上传头像的实现javascript
可是当时裁剪后图片是保存为base64格式的,这是h5 canvas建议使用的图片传输方式。html
不少时候不少api,好比mui中第三方插件map中有一个setIcon传入的必须是本地的图片文件地址,目前的第三方地图系统任然不支持base64的标注图,因此折腾了一晚以后终于在native.js中找到了将base64转化为图片的办法html5
官网文档请看:http://www.html5plus.org/doc/zh_cn/nativeobj.html#plus.nativeObj.BitmapSaveOptionsjava
将bitmap实现放入app的公共js当中,好比我放在app.js中,而且塞在app这个闭包当中,随出引用调用:web
(function($, owner) { //将BASE 64保存为文件 owner.baseImgFile = function(uid, base64, quality, callback) { quality = quality || 10; callback = callback || $.noop; var bitmap = new plus.nativeObj.Bitmap(); // 从本地加载Bitmap图片 bitmap.loadBase64Data(base64, function() { // console.log('加载图片成功'); bitmap.save("_doc/" + uid + ".jpg", { overwrite: true, quality: quality }, function(i) { callback(i); // console.log('保存图片成功:'+JSON.stringify(i)); }, function(e) { console.log('保存图片失败:' + JSON.stringify(e)); }); }, function(e) { console.log('加载图片失败:' + JSON.stringify(e)); }); } }(mui, window.app = {}));
第一个参数是文件名,我直接使用用户id,第二个参数是base64字符串,第三个参数是图片质量1-100,最后一个参数回掉函数,可获取保存图片文件的信息canvas
使用:api
app.baseImgFile(app.getUserInfo().id,my_icon,1,function(i){ alert(JSON.stringify(i)); });
也能够直接定义为function xxx(){}这样在调用的时候就不是从闭包中获取,经过原函数名调用闭包
在官方文档中:app
bitmap对象下的方法:函数
其中咱们使用的save方法:
官方示例:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/> <title>NativeObj Example</title> <script type="text/javascript"> var wc=null,bitmap=null; // H5 plus事件处理 function plusReady(){ wc = plus.webview.currentWebview(); bitmap = new plus.nativeObj.Bitmap("test"); // 将webview内容绘制到Bitmap对象中 wc.draw(bitmap,function(){ console.log('绘制图片成功'); },function(e){ console.log('绘制图片失败:'+JSON.stringify(e)); }); } if(window.plus){ plusReady(); }else{ document.addEventListener("plusready",plusReady,false); } // 保存图片 function saveBitmap(){ bitmap.save( "_doc/a.jpg" ,{} ,function(i){ console.log('保存图片成功:'+JSON.stringify(i)); } ,function(e){ console.log('保存图片失败:'+JSON.stringify(e)); }); } </script> </head> <body> 保存图片<br/> <button onclick="saveBitmap()">Save</button> </body> </html>