说说在 Android 中如何压缩图片

目前存在两种压缩图片方式:
* 质量压缩 - 不改变图片尺寸。
* 按比例压缩 - 相当于是在像素上进行压缩。

而图片有三种存在形式:
* file - 磁盘。
* stream - 网络传输、内存。
* bitmap - 内存。

bigmap 在内存中的大小是按像素计算的,也就是width * height,所以如果需要在 Android 中显示照片,那么就必须进行按比例压缩,避免因为内存消耗过大,导致 APP 退出。

 /**
     * 按比例压缩
     *
     * @param path   图片路径
     * @param width  宽度(像素)
     * @param height 高度(像素)
     * @return
     */
    public Bitmap ratioCompress(String path, float width, float height) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.RGB_565;//一个像素存储两个字节,默认为一个像素存储四个字节
        options.inJustDecodeBounds = true;//允许接下来直接得到 Bitmap 对象而不会消耗内存

        Bitmap bitmap = BitmapFactory.decodeFile(path, options);//只是空的 Bitmap 对象

        int outWidth = options.outWidth;
        int outHeight = options.outHeight;

        /**
         * 计算缩放比
         */
        int ratio = 1;//缩放比,1 表示不缩放
        if (outWidth > outHeight && outWidth > width) {//按照宽度进行缩放
            ratio = (int) (outWidth / width);
        } else if (outWidth < outHeight && outHeight > height) {//按照高度进行缩放
            ratio = (int) (outHeight / height);
        }
        if (ratio <= 0) {
            ratio = 1;
        }

        options.inSampleSize = ratio;//设置缩放比
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(path, options);//压缩
    }

是不是很简单呀 O(∩_∩)O哈哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值