评论

微信上传图片被压缩终极解决方案

微信上传图片被压缩终极解决方案

最近一直在对前期项目进行重构,遇到了之前一个悬而未解的问题,梳理下,寻找可能存在的解决方案

大家都知道微信上传图片被压缩了,但是这种情况是否能解决呢?

1

2微信上传图片主要用到以下几个api


3

 

目前项目上传方案用到上述的①②两个接口,通过①选择图片,然后通过②获取图片的base64,其中在选择图片时,采用的尺寸模式为压缩。

 由于该方案在减少传输和存储压力的同时,极大降低了图片的质量,导致在后续识别过程中,造成非常大的困扰。

  

同时,由于该方案在压缩模式选择这块,即使选择了原图,部分机型也会存在压缩的情况,并且没有一个明确的清晰的压缩策略,有时候这种压缩比非常大,同样会导致上传的身份证照片带的细节信息丢失,最后的图片甚至人眼不可识别

 

针对这个问题目前可供参考的解决方案是:

 利用上述①③两个接口,在选择图片的时候,将图片上传到微信服务器,即通过微信的uploadImage上传到微信服务器,拿到服务器返回的文件serverId,然后通过素材管理,临时素材管理接口,根据serverId将图片下载到自己服务器,这种方案的优势在于,图片的压缩策略完全是由我们来掌控的,不管具体采用哪个压缩比,都是可以通过代码来控制。

 

下面简单分析下图片上传用到的几个api,传递参数以及输出相应

 

①chooseImage拍照或从手机相册中选图接口

 

{"localIds":["wxLocalResource://6110441863775331"],"sourceType":"album","errMsg":"chooseImage:ok"}

 


 

②uploadImage上传图片接口

 

{"localId":"wxLocalResource://6110448596555452","serverId":"uNMAdM7ElbVX2m6bqfh77pMGD8t4u8TebDdcjOJpKidsWMKY3F0RHbQPFQp76ACB","errMsg":"uploadImage:ok"} 



备注:上传图片有效期3天,可用微信多媒体接口下载图片到自己的服务器,此处获得的 serverId 即 media_id。

 

后端从微信服务器下拉图片

https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_temporary_materials.html

 


属于素材管理里面的获取临时素材接口

 

 

关于access_token如何生成,具体可以参考下面链接的文档

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

 

可在下面网址进行测试

https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%8E%A5%E5%8F%A3%20/media/upload

 

2

 

具体参考文档

https://developers.weixin.qq.com/community/develop/doc/00088493fb47182c6e27b681b54c00

 

目前该方案已上生产,经得起实践的检验。

最后一次编辑于  2020-05-22  
点赞 1
收藏
评论

1 个评论

  • 可以加但是没必要
    可以加但是没必要
    2021-08-02

    想问一下在chooseImage步骤选择压缩和原图对uploadImage有效吗 为什么我用ios测试的时候下载下来的图片都是压缩的

    2021-08-02
    赞同
    回复
登录 后发表内容