收藏
回答

wx.chooseImage,IOS/Android选择图片被压缩?

问题1:安卓使用真机无法选择原图,微信版本8.0.50

问题2:IOS/安卓选择图片上传后,图片被压缩,IOS选择100M的原图被压缩至5M,安卓选择40M的图片(无原图选项)被压缩至200K

问题3:wx.chooseImage后,使用wx.getLocalImgData获取localData计算大小,通过wx.uploadImage上传到微信服务器得到mediaId

然而,wx.getLocalImgData计算的大小与后端通过mediaId获取到的图片大小不一致

原图40M, wx.getLocalImgData计算为3643826=3.475M,通过mediaId获取的图片大小200K

wx.chooseImage({
  count: 1, // 默认9
  sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
  success: (res) => {
    // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
    console.log(res.localIds);
  },
  cancel: () => {}
});

// 获取base64图片的大小
function getBase64ImageSize(base64String) {
  // 移除"data:image/*;base64,"前缀,这个前缀不包含实际的数据
  const prefix = /^data:image\/(png|jpg|jpeg);base64,/;
  const base64Data = base64String.replace(prefix, "");
  // 计算base64字符串的字节长度
  const decodedData = atob(base64Data); // 使用atob函数解码base64字符串
  const imageSize = decodedData.length; // 获取解码后的字符串长度,即图片大小(字节)
  return imageSize;
}


最后一次编辑于  08-20
回答关注问题邀请回答
收藏

1 个回答

登录 后发表内容