最近一直在对前期项目进行重构,遇到了之前一个悬而未解的问题,梳理下,寻找可能存在的解决方案
大家都知道微信上传图片被压缩了,但是这种情况是否能解决呢?
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
可在下面网址进行测试
2
具体参考文档
https://developers.weixin.qq.com/community/develop/doc/00088493fb47182c6e27b681b54c00
目前该方案已上生产,经得起实践的检验。
想问一下在chooseImage步骤选择压缩和原图对uploadImage有效吗 为什么我用ios测试的时候下载下来的图片都是压缩的