收藏
回答

jssdk图像接口安卓压缩失效问题

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.chooseImage 微信安卓客户端 7.0.22 1.3.3

需求是想借助chooseImage上传图片,最终获取到压缩后图片的base64。

使用方式如下,前端调用chooseImage 拍照/相册选图上传,sizeType选择compressed压缩,使用uploadImage将图片上传至微信端服务器,再使用download将图片下载至本地,再使用getLocalImgData将获取下载图片的Base64字符串,取Base64串送至应用后台做处理。

出现的问题:ios从本地、相机拍照上传均正常;

安卓端,从相机拍照上传图片,按流程走完,获取到的Base64是一个相对较小的串,通过手机相册和后台日志看,相册中的图片大概在300多K,返回的Base64 (getLocalImageData的localData字段)400-500K;如果使用本地相册上传图片(4.09M),无论sizeType选择compressed或original,手机相册都无法看到下载后的图片,并且getLocalImageData返回的base64的长度一样,均为3604265,感觉是未将上传的图片进行压缩就返回了。


响应代码如下:

let u = navigator.userAgent

if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {

 this.mobileType = 'Android'

else if (u.indexOf('iPhone') > -1) {

 this.mobileType = 'iPhone'

}

const _this = this

wx.chooseImage({

 count: 1, // 默认9

 sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有

 sourceType: ['camera', 'album'], // 可以指定来源是相册还是相机,默认二者都有

 fail: function () {

   //todo sth

 },

 success: function (res) {

   var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片

   //upload img

   wx.uploadImage({

     localId: localIds[0].toString(), // 需要上传的图片的本地ID,由chooseImage接口获得

     isShowProgressTips: 1, // 默认为1,显示进度提示

     success: function (res) {

       var serverId = res.serverId; // 返回图片的服务器端ID

       //downloadImg

       wx.downloadImage({

         serverId: serverId, // 需要下载的图片的服务器端ID,由uploadImage接口获得

         isShowProgressTips: 1, // 默认为1,显示进度提示

         success: function (res) {

           var localId = res.localId; // 返回图片下载后的本地ID

           wx.getLocalImgData({

             localId: localId,

             success: function (res) {

               let localData = res.localData

               //页面图像预览

               if (_this.mobileType === 'Android') {

                 _this.pic0 = localIds[0]

               } else {

                 _this.pic0 = localData

               }

               localData = localData.replace("data:image/jpg;base64,", "")

               localData = localData.replace("data:image/jpeg;base64,", "")

               localData = localData.replace("data:image/jgp;base64,", "")

               _this.uploadPic0 = localData //传递至服务端的图片数据

             }

           })

         }

       });

     }

   });

 }

});

回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容
问题标签