微信开发 关于wx.getLocalImgData那点事儿 已解决!

最近公司开发微信公众平台,用到了微信的选择图片以及图片选择完成后再手机里预览的问题,一开始在安卓手机的时候很顺利,一直开发完成。挺高兴的,可是当我拿同事的iOS一看的时候,尼玛啊,图片是能选,可是预览不了啊 ,是空白的!!!!是空白的!!!!是空白的!!!!

后来我一看api  还有一个接口 wx.getLocalImgData  那么问题来了接口是有 可是怎么使用呢 捣鼓了半天 期间也遇到各种问题,功夫不负有心,在我加班到晚上9点多的时候 终于搞出来了  哈哈哈 废话不多说 上代码

 

首先 微信的js文件是必须要引的  

 

        <script src="${path}/static/aui/myscript/sha1.js"></script>//用于微信的签名算法
 
        http://res.wx.qq.com/open/js/jweixin-1.2.0.js
        
其次是配置调用微信的接口 这个就不必多说了 从后台取jssdk 然后前台执行加密算法,微信开发文档里都有
$.ajax({
 type : "GET",
 url : url+"/wx/web/main/getticket",//后台接口取微信的临时门票 
dataType : 'json', 
async: false, 
contentType : "application/json", 
data : ticketprams, 
success : 
function(ro) { 
if(ro.code == 200){
 console.log(ro) 
appid=ro.datas.appid; //公众号的appid 
jsapi_ticket = ro.datas.jsapi_ticket; //后台返回的jsapi_ticket
 
} },
 error : function(err) { 
alert(err.message); } });
 
 
 //随机字符串 var chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; 
 
function generateMixed(n) { var res = ""; for(var i = 0; i < n ; i ++) { var id = Math.ceil(Math.random()*35); res += chars[id]; } return res; }; var noncestr=generateMixed(17); //生成签名
 var shastring="jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"×tamp="+nowtime+"&url="+window.location.href; //注意 //window.location.href 不能包含#号
 

//alert(shastring);var signa=hex_sha1(shastring);//算签名
wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。  
appId: appid, // 必填,公众号的唯一标识  
timestamp: nowtime, // 必填,生成签名的时间戳  
nonceStr: noncestr, // 必填,生成签名的随机串  
signature: signa,// 必填,签名,见附录1  
jsApiList : [ 'chooseImage', 'previewImage', 'uploadImage', 'downloadImage', 'chooseWXPay', 'getLocalImgData' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 
 }); })

好了 前期准备工作 到此为止 开始正题
var images = { localId: [],//微信返回的本地id列表 
serverId: [],//微信返回的服务器id列表 }; 
ioslocId=[];//用于兼容ios的本地id列表 图片是base64格式的
 
$("#add").on('click',function () { //点击加号的时候执行下面函数  
var imglen=images.localId.length;//计算 本地id列表的长度
 wx.chooseImage({ count: 8-imglen, // 默认9 计算还可以选择几张图片 我这默认是8 
 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 
 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 
 success: function (res) {  
$("#photolist").html("");//每次选择图片完成后都清空之前已经添加的html节点  
rows="";//声明一个空字符串用于保存循环出来的html 
images.localId =images.localId.concat(res.localIds); // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片    
if (window.__wxjs_is_wkwebview) { //判断ios是不是用的 wkwebview 内核 
for(var i=0;i<images.localId.length;i++){ 
wx.getLocalImgData({ //循环调用 getLocalImgData localId:res.localIds[i], // 图片的localID  success: function (res) { 
var localData = res.localData; // localData是图片的base64数据,可以用img标签显示  
localData = localData.replace('jgp', 'jpeg');//iOS 系统里面得到的数据,类型为 image/jgp,因此需要替换一下  
ioslocId.push(localData) //把base64格式的图片添加到ioslocId数组里 这样该数组里的元素都是base64格式的 
rows=""; 
for(var j=0;j<ioslocId.length;j++){ 
rows+=`<div class="z_file" style="background-image: url(`+ioslocId[j]+`)"><div class="delete" data-id="`+j+`"></div></div>`  } 
$("#photolist").html(rows); },fail:function(res){ alert("res"); } }); } alert(rows) } 
else{ //如果不是用的wkwebview 内核 或者是用的安卓系统 执行下面的xunh $.each(images.localId,function (index,el) { rows+=`<div class="z_file" style="background-image: url(`+el+`)">  <div class="delete" data-id="`+index+`"></div>  </div>`  }); $("#photolist").html(rows); } uploadimg(); 
//上传图片的方法 官方dome都有 我就不在赘述。 } }); }); });
 
 
ok 目前完美解决!!!
 
---------------------------------------------------------------
以下是2017年12月25日更新:
 有的朋友开发是用到vue来开发 请注意当你用vue时候 会有个大坑。用上面的方法就是ios里面 
选择一张图片的时候是没有问题的 当你选择多张的时候 你发现 上面的方法不好用了。用vue 实现就的换一种思路了
如下是解决后的截图

 
 

 

大致思路 还是一样的 就是换了一种执行办法。 选多张的时候 你也让他按一张来 
当前一个getLocalImgData完成后 在执行一遍getLocalImgData 只是第二次执行的时候 
里面的loacid 变成第二个了 这是递归么。。。。
如果 你这样写完之后发现base64 的url  都是正常的 但是还是没有显示图图片的话 那可能是v-for 的问题 不要用v-for循环 它可能没有重新渲染页面 要用show来解决


欢迎加qq骚扰:710988935
--------------------- 
作者:冥界摄政王 
来源:CSDN 
原文:https://blog.csdn.net/jinyuyang78/article/details/76168649 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值