当前位置:首页 > 开发 > 移动开发 > 正文

Android中进行图像压缩和缩放

发表于: 2013-04-19   作者:daniel_tu   来源:转载   浏览次数:
摘要: 这里将的是只使用 Android 中自带的库进行简单的图像缩放和压缩, 如果对图像处理有更多要求的话, 建议使用其他的库, 这里使用自带库进行操作适合图片处理没不是主要逻辑的项目, 简单的只是想缩小或压缩图片. 压缩图片 这里简单的将一个图片文件转换为 Bitmap ,并且在转换的过程中对图片质量进行简单压缩: bitmap.compress(Bitmap.CompressFor

这里将的是只使用 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)

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

Android中进行图像压缩和缩放

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
写了个图像缩放的小程序,仅为使用下opencv for Andorid。 在Android2.3.1模拟器运行,程序界面:
前面发过一篇如何利用Matrix来旋转图像,那么如何来缩放图像呢?其实旋转和缩放一样,不同的是需要
Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画
以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,现在在Android中有一个Matrix类,它的中
最近开始接触opencv for Android,从网上down了图像的边沿检测的代码。 测试图片: http://dl.iteye
关于android中ImageView的外观,即图片在其内显示出的样子,与布局文件中adjustViewBonds和scaleTyp
给大家分享的是Android图像特效处理的小技巧,比如圆角、倒影、还有就是图片缩放、Drawable转化为Bi
大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,D
大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,D
ImageView是一个用于显示图像的控件,比如在很多联系人方面的应用中,需要为联系人拍摄头像,并将得
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号