Android 微信分享链接部分手机无法成功分享

今天在项目中发现有些手机调起微信分享链接功能可以成功,但是有些sendReq返回是false 无法分享。
同一品牌不同型号、不同固件版本对图片压缩的方式都不一样,查看了所有手机压缩后的分享缩略图,每款手机压缩后的大小都不一样。
大家可以视情况,加大对图片尺寸、质量的压缩,
我压缩的尺寸是20px*20px

public static ByteArrayOutputStream compressSize(Bitmap bitmaps, int pixelW, int pixelH) {
    //暂时防止图片超出1M 会溢出  先不用

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    bitmaps.compress(Bitmap.CompressFormat.PNG, 100, os);
    if (os.toByteArray().length / 1024 > 1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
        os.reset();//重置baos即清空baos
        bitmaps.compress(Bitmap.CompressFormat.PNG, 50, os);//这里压缩50%,把压缩后的数据存放到baos中
    }

    ByteArrayInputStream bis = new ByteArrayInputStream(os.toByteArray());
    BitmapFactory.Options options = new BitmapFactory.Options();
    //此次压缩只获取边框
    options.inJustDecodeBounds = true;
    //设置成 jpg格式的颜色分配
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeStream(bis, null, options);
    Log.i("fsef", "bis = " + bis + " bitmap = " + bitmap);
    //设置好压缩的尺寸开始压缩
    options.inJustDecodeBounds = false;

    int w = options.outWidth;
    int h = options.outHeight;
    float hh = pixelH;// 设置高度为240f时,可以明显看到图片缩小了
    float ww = pixelW;// 设置宽度为120f,可以明显看到图片缩小了
    //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
    int be = 1;//be=1表示不缩放
    //如果当前图片尺寸大于要指定的尺寸 那就压缩
    if(hh <= h && ww <= w){
        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
            be = (int) (options.outWidth / ww);
        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
            be = (int) (options.outHeight / hh);
        }
        if (be <= 1) be = 2;
    }

    options.inSampleSize = be;//设置缩放比例
    //每进行一次构建 bis 流都要重新 获取
    bis = new ByteArrayInputStream(os.toByteArray());
    bitmap = BitmapFactory.decodeStream(bis, null, options);
    //压缩完了尺寸进行质量的压缩
    return compressQuality(bitmap);
}
/**
 * 压缩图片质量  返回压缩后的流对象
 */
public static ByteArrayOutputStream compressQuality(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int options = 90;//个人喜欢从80开始,
    bmp.compress(Bitmap.CompressFormat.PNG, options, baos);
    while (baos.toByteArray().length / 1024 > 200) {
        if(options == 50){
            break;
        }
        baos.reset();
        options -= 10;
        bmp.compress(Bitmap.CompressFormat.PNG, options, baos);
    }
    /*ByteArrayInputStream bis = new ByteArrayInputStream(baos.toByteArray());

    return BitmapFactory.decodeStream(bis);*/
    return baos;
}

之后看看所有手机压缩后的分享图标都小于32kb就可以分享成功了,部分手机看着是小于32kb,但分享出去重新载入内存后就不止32kb。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值