微信JSSDK使用getLocalImgData获取图片Base64数据

立川同学发布

通过微信JSSDK的chooseImage接口获得的图片localID已经不能当做<img>的src显示图片了。我安卓手机上的图片已经显示为空白。

连机调试,遇到错误:
violates the following Content Security Policy directive: "default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: gap: content:". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

其实这不是安全策略的问题,而是以前的localID不能再当src使用了。

通告原文请参考《iOS WKWebview 网页开发适配指南》

投以我们需要使用新接口getLocalImgData。

首先,要在前端申请这个接口:

wxSignPackage.jsApiList.push('getLocalImgData','chooseImage');

之后,在页面加载完成后要验证当前客户端是否支持getLocalImgData接口

wx.checkJsApi({
  jsApiList: ['getLocalImgData'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
  success: function(res) {// 以键值对的形式返回,可用的api值true,不可用为false
    // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
  }
});

接下来,用chooseImage选中图片之后,就可调用

wx.chooseImage({
  count: 9, // 默认9
  sizeType: 'original', // 可以指定是原图还是压缩图,我只要原图
  success: function (res) {
    var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
    for(var i=0;i<localIds.length;i++){
      localId = localIds[i];
      wx.getLocalImgData({
        localId: localId, // 图片的localID
        success: function (res1) {
          var localData = res1.localData; // localData是图片的base64数据,可以用img标签显示
          处理((this).localId,localData);
        } //end success
      }); //end wx.getLocalImgData
    } //end for
  } //end success
}); //end function

注意,苹果IOS和Android加载出来的图像Base64数据不同!

if(localData.substr(0,5)!='data:'){
  localData='data:image;base64,'+localData;
}