美文网首页
Android图片压缩

Android图片压缩

作者: 拒绝飞的鸟 | 来源:发表于2016-03-07 15:12 被阅读200次

    主要有两种形式:

    1. 压缩图片的尺寸大小
    2. 压缩图片的质量(尺寸不变)

    1.压缩尺寸

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath,options);// 计算 inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);// Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(filePath,options);
    
    

    关键的在于设置options.inSampleSize的值,当options.inSampleSize为1的时候不压缩,2的时候压缩一倍,options.inSampleSize的有效值是1、2、4、8、16......

    2.压缩质量

    这种方式压缩后的尺寸大小不变

    Bitmap bitmap = BitmapUtil.decodeBitmapFromFile(path,1080,1080);
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.PNG ;
    if(options.outMimeType.equals("image/jpeg")){   
     compressFormat = Bitmap.CompressFormat.JPEG;
    }
    bitmap.compress(compressFormat,30,stream);
    

    这里需要注意compressFormat的值一定要和原图一直,否则压缩会不成功。这里使用BitmapFactory.Options先测量出图片文件的信息,options.outMimeType就表示图片的mime类型。
    不要用后缀名检测格式,后缀名都是虚的,用户可以自由修改。

    使用

    有时候一张图片的质量很小,但是尺寸很大,加载时可能出出现这个警告:
    Bitmap too large to be uploaded into a texture (440x6405, max=4096x4096)
    虽然不会抛出错误,但是图片会不显示出来。
    这是硬件加速的一个限制,关闭硬件加速即可。

    • 通常压缩上传可以两种方式一起压缩。
    • ImageView控件显示图片一般使用尺寸压缩后显示。

    相关文章

      网友评论

          本文标题:Android图片压缩

          本文链接:https://www.haomeiwen.com/subject/uqoakttx.html