所遇问题
最近在项目开发中,需要用到一个分享的功能。当我千辛万苦的把整个页面的绘制出来转换成比bitmap的时候,算了下,大概最长的图片高度应该有9000+,点击分享到微信,嗯哼?!什么情况?调不起微信客户端,mmp.
好烦.jpg
找坑
查看微信官方开发者文档,里面有提到调不起的主要原因有:
微信是否安装
调用时的Apk包名和签名是否与开放平台填写的一致
检查发送时的缩略图大小是否超过32k
发现坑
对于上面的3点,第一点是不用看的嘛。来看看第2点:
调用时的Apk包名和签名是否与开放平台填写的一致,意思是在申请微信分享key的时候所填写的包名是否与现在所打包出来的包名是否一致,还有打包出来的apk签名是否与后台所配置的签名MD5一致,可以去微信开发者下载签名检验工具检验。
经调试发现,分享整个应用的时候(就是有标题有内容有网页链接)时,微信分享是能调起来的,说明以上第二点所提到的问题不存在,那只有第3点了。来看看第三点:
检查发送时的缩略图大小是否超过32k,这是什么gui,内牛满面.
QQ图片20170802132034.jpg
由于项目中所分享的图片是整个页面的长图,初分享时只是简单的进行质量压缩,并没有进行深度压缩,导致的官方所说的缩略图大小不能大于32k的限制使得调不起微信来分享。
填坑
既然知道了问题在哪里,对于技术宅来说解决问题就再容易不过了,马上开干。说到底还是图片的压缩问题而已,下面说说常见的几种bitmap的压缩方式,条件是在使得能调起微信分享的情况下,最大化图片的质量,以防止深度压缩导致的模糊不清。
QQ图片20170802142212.gif
使用RGB_565的config
Bitmap.createBitmap(finalWidth, finalHeight, Bitmap.Config.RGB_565);
在创建一个bitmap的时候,第三个参数有4种配置,分别是:
Bitmap.Config ALPHA_8 表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度
Bitmap.Config ARGB_4444 表示16位ARGB位图