Android中进行图像压缩和缩放

本文介绍如何在Android中使用自带库进行图片的压缩与缩放。包括调整图片质量、按比例缩放图片以及剪切图片等实用技巧。

这里将的是只使用 Android 中自带的库进行简单的图像缩放和压缩, 如果对图像处理有更多要求的话, 建议使用其他的库, 这里使用自带库进行操作适合图片处理没不是主要逻辑的项目, 简单的只是想缩小或压缩图片.

压缩图片

这里简单的将一个图片文件转换为 Bitmap ,并且在转换的过程中对图片质量进行简单压缩:

bitmap.compress(Bitmap.CompressFormat.JPEG, int quality, FileOutputStream fos);

注意这里的 quality 的范围为 0~100 ,经过测试如果这个值设置比较低的话图片会非常不清晰, 基本不可用, 0~100 的值可以参考类似Photoshop之类输出图片时选择的图片质量.

此方法只是单纯对图片质量进行处理, 并不会改变其大小, 如果需要改变图片文件的大小, 最好是使用缩放, 这个可以在保证一定的图片清晰度的情况下减少了图片大小, 毕竟手机屏幕就那么点, 你把 2000px * 1000px 的图片改为 500px * 250px 在手机用户看来也不会有太严重的不适感, 而如果你只设置图片的 quality 想来改变文件大小, 你最后会发现得到的是一个 2000px * 1000px 的几个色块.

缩放图片

先提代码看看:

  /**
     * 保持长宽比缩小Bitmap
     *
     * @param bitmap
     * @param maxWidth
     * @param maxHeight
     * @return
     */
    public Bitmap resizeBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {

        int originWidth  = bitmap.getWidth();
        int originHeight = bitmap.getHeight();

        // no need to resize
        if (originWidth < maxWidth && originHeight < maxHeight) {
            return bitmap;
        }

        int width  = originWidth;
        int height = originHeight;

        // 若图片过宽, 则保持长宽比缩放图片
        if (originWidth > maxWidth) {
            width = maxWidth;

            double i = originWidth * 1.0 / maxWidth;
            height = (int) Math.floor(originHeight / i);

            bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
        }

        // 若图片过长, 则从上端截取
        if (height > maxHeight) {
            height = maxHeight;
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
        }

//        Log.i(TAG, width + " width");
//        Log.i(TAG, height + " height");

        return bitmap;
    }

这里演示是将图片缩小到一个max范围内, 而不是直接将变成硬性的变成某个尺寸的图片, 因为一般来说这种设置max的方式符合大部分需要, 如果必须将图片变成某个指定尺寸可以直接使用 Bitmap.createScaledBitmap 方法, 也是下面要介绍的.

此函数主要就是使用了 Bitmap 的两个静态方法, 一个是:

public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)

此方法就会把一个 Bitmap 图片 缩放 成指定的尺寸.

剪切图片

而这里还使用到了另一个方法:

public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)

此处使用该方法的目的是 剪切 图片, 就是只取图片的某个区域, 从而达到 剪切 图片的效果.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值