Android 图片质量压缩小记

   对于图片的处理,几乎是最普通的需求了,上传图片,图片拷贝,但是往往本地图片会比较大,这个时候就需要压缩处理了,总不能把一张几兆的图片上传给服务器吧,这个是完全没必要的。

1,图片保存文件 

/**
     * 处理 bitmap,把一张很大的图片压缩到另外一个目录
     */
    private void handleBitmap()
    {
        String imgPath = Environment.getExternalStorageDirectory()
                .getPath() + "/IMG_1024.jpg"; // 7M

        Log.e("imageSize",new File(imgPath).length()/1024+"KB");
        String imgCopyPath = Environment.getExternalStorageDirectory()
                .getPath() + "/IMG_1026.jpg";
        Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
        
        FileOutputStream fos = null;

        try {
            fos =  new FileOutputStream(imgCopyPath);
            bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.e("imageSize",new File(imgCopyPath).length()/1024+"KB");

    }

日志:

12-19 15:31:33.987 28442-28442/? E/imageSize: 7528KB
12-19 15:31:34.488 28442-28442/? E/imageSize: 627KB

大约7.5M 最后压缩到627KB,但是这张图片仍然很大。

 

2,图片压缩到指定大小

 /**
     * 处理 bitmap,把一张很大的图片压缩到另外一个目录
     */
    private void handleBitmap()
    {
        String imgPath = Environment.getExternalStorageDirectory()
                .getPath() + "/IMG_1024.jpg"; // 7M

        Log.e("imageSize",new File(imgPath).length()/1024+"KB");
        String imgCopyPath = Environment.getExternalStorageDirectory()
                .getPath() + "/IMG_1026.jpg";
        Bitmap bitmap = BitmapFactory.decodeFile(imgPath);

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
        int options = 90 ;
        while(byteArrayOutputStream.size()>1024*300 && options>0)
        {
            byteArrayOutputStream.reset();
            bitmap.compress(Bitmap.CompressFormat.JPEG,options,byteArrayOutputStream);
            options -= 10;
           // Log.e("imageSize","Compress-----"+(byteArrayOutputStream.size() == byteArrayOutputStream.toByteArray().length));
            Log.e("imageSize","Compress-----"+byteArrayOutputStream.toByteArray().length/1024+"KB");
        }
        FileOutputStream fos = null;

        try {
            fos =  new FileOutputStream(imgCopyPath);
            byteArrayOutputStream.writeTo(fos);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.e("imageSize",new File(imgCopyPath).length()/1024+"KB");

    }

日志:

 E/imageSize: Compress-----2014KB
 E/imageSize: Compress-----1205KB
 E/imageSize: Compress-----936KB
 E/imageSize: Compress-----752KB
 E/imageSize: Compress-----627KB
 E/imageSize: Compress-----545KB
 E/imageSize: Compress-----453KB
 E/imageSize: Compress-----222KB
 E/imageSize: 222KB

最终压缩到300K 以下。

 

参考:

Android-图片的压缩(质量压缩和尺寸压缩)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值