解决微信分享小程序图片模糊问题

问题发现现象

开发过程中,发现小米5手机微信分享的小程序的图片很模糊。但是小米5s手机分享的图片不是很模糊。

问题的原因

先贴上分享的图片的压缩代码,了解到之前的微信分享是有32k图片大小限制的。

String path = "图片文件路径";//
BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeFile(path, options);
                options.inSampleSize = Math.max(options.outWidth, options.outHeight) / THUMB_SIZE;//微信分享图片大小,值150
                if (options.inSampleSize < 1) {
                    options.inSampleSize = 1;
                }
                options.inJustDecodeBounds = false;
                byte[] testBitmapSize = null;
                try {
                    mBitmap = BitmapFactory.decodeFile(path, options);
                    if (mBitmap != null && options.outWidth > 0 && options.outHeight > 0) {
                        int qualitySize = 100;
                        testBitmapSize = bmpToByteArray(mBitmap, false, qualitySize);

                        while (testBitmapSize.length > 32 * 1024 && qualitySize > 10) {
                            qualitySize -= 10;
                            testBitmapSize = bmpToByteArray(mBitmap, false, qualitySize);
                        }
                        mBitmap.recycle();
                    }
                } catch (Exception e) {
                }  finally {
                    final byte[] byteArray = testBitmapSize;
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                          //具体分享逻辑,微信sdk说明文档有
                        }
                    });
                }

可以看到分享的图片有一个32k的限制。但是新版的sdk没有说明有这个限制。因此这次去掉这个限制。不压缩图片看看图片是否会变清晰。发现小米5分享出去的图片还是很模糊,但是小米5s还是正常。为什么同样的代码确实不同的效果呢?

经过调试发现,两个手机得到的bitmap大小竟然不一样,一个是32k左右,小米5只有18k,看来这个还和手机有关系。

问题解决

调大THUMB_SIZE
因此,这里把图片的THUMB_SIZE调大成300,再分享发现图片果然变清晰了。但是分享微信的图片大小真的没有限制了吗?而且总不能总归还是要压缩图片的,毕竟图片太大传过去也不合适,清晰度够用就行了。

换了张稍微大一点儿的图片分享,发现分享不了,看看了日志,发现微信是有128k的限制的。但是文档为什么没有说明呢?这里不纠结这个,把图片大小限制调成128k。发现可以分享了。

由于分享小程序的图片显示的比较大,所以不清晰的问题产生了,这里没有必要把分享链接的形式32k小图逻辑覆盖掉。

了解到旧版本的微信分享小程序的形式也是链接小图的形式,或者样式是链接小图的小程序分享。因此这种情况也可以使用小图。

最终,这样解决:

if (isMicroAppShare && isSupportAPI) {
          THUMB_SIZE = 300;
          LIMIT_SIZE = 128 * 1024;
} else {
          THUMB_SIZE = 150;
          LIMIT_SIZE = 32* 1024;
}

*****补充*****
一个朋友指出,这里最终的解决有一个问题,假设升级了sdk,isSupportAPI就可能在当前的版本走else的逻辑。造成问题,因此这里的逻辑需要变一下。

//若客户端版本低于6.5.6,小程序类型分享将自动转成网页类型分享。开发者必须填写网页链接字段,确保低版本客户端能正常打开网页链接。发现6.5.10之后微信分享小程序的样式才是大图的模式,所以这里的判断应该是6.5.10,对应code:620756998

////6.5.6支持分享小程序,为了保证高版本收到的图片清晰(6.5.10展示的是大图),所以这是使用6.5.6(620756993)结果分享给高版本的微信还是很模糊,这个是微信自己压缩的,我们也没办法了。
if (isMicroAppShare && getWechatAPI() >= 620756993) {
          THUMB_SIZE = 300;
          LIMIT_SIZE = 128 * 1024;
} else {
          THUMB_SIZE = 150;
          LIMIT_SIZE = 32* 1024;
}

注意:朋友圈分享链接的话,需要压缩到32k,否则会报错

总结

这次的问题并不复杂,但是自己在解决过程中却走了很多弯路,因此这次记录下来。以后再遇到问题,一定要先找到对的思路,然后尽可能多的考虑全面。希望对大家有所帮助。

    原文作者:张大川大川
    原文地址: https://www.jianshu.com/p/126f2245d323
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞