对图片进行压缩

原创 2015年11月17日 20:37:09

对图片进行二次采样的时候计算压缩之后的尺寸

/**
     * 官方计算代码
     * 根据用户所给出的宽度和高度计算出来压缩比例
     * @param options
     * @param reqWidth
     * @param reqHeight
     * @return
     */

    public static int calculateInSampleSize(
         BitmapFactory.Options options, int reqWidth, int reqHeight) {
        // Raw height and width of image
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        //当请求的宽度高度大域名的时候进行缩放
        if (reqWidth > 0 && reqHeight > 0) {
            if (height > reqHeight || width > reqWidth) {

                final int halfHeight = height / 2;
                final int halfWidth = width / 2;

                // Calculate the largest inSampleSize value that is a power of 2 and keeps both
                // height and width larger than the requested height and width.
                while ((halfHeight / inSampleSize) > reqHeight
                        && (halfWidth / inSampleSize) > reqWidth) {
                    inSampleSize *= 2;
                }
            }
        }

        return inSampleSize;
    }



生成图片:
                      //按照原始的图片的尺寸 进行Bitmap的生成
                    //bitmap生成的时候是按照图片的原始的宽高进行生成,并且每一个像素占用四个字节也就是ARGB
                    //ret = BitmapFactory.decodeByteArray(data,0,data.length);
                    //采用二次采样也就是缩小图片尺寸的方法
                    //步骤1:获取原始图片的宽、高的信息只用于采样的计算
                    //1.1: 创建Options给BitMapFactiry内部解码器传递参数
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    //1.2设置inJuetDecodeBounds 来控制解码器。只进行图片高度和宽度的获取不会加载Bitmap
                    //不占用内存,当时用这个参数,代表BitmapFactory.decodeXxx类似的方法,不会返回Bitmap
                    options.inJustDecodeBounds = true;
                    //解码的时候使用Options参数设置解码的方式
                    BitmapFactory.decodeByteArray(data, 0, data.length, options);
                    //--------------------------------------------------------------------------------
                    //2:根据图片的真实的尺寸,和当前需要显示的尺寸,进行计算,生成图片的采样率。
                    //2.2 准备显示在手机上的尺寸
                    //尺寸是根据程序需要设置的。
                    int size = calculateInSampleSize(options, requestWidth, requestHeight);
                    //2.3 计算和设置采样率
                    options.inSampleSize = size;//宽度的1/32 高度的1/32
                    //2.4开放 解码,实际生成Bitmap
                    options.inJustDecodeBounds = false;
                    //2.4.1
                    //要求对每一个采样的像素使用RGB_565存储方式
                    //一个像素占用两个字节比 ARGB_8888小了一半
                    //如果解码器不能使用指定的配置那么自动使用 ARGB_8888
                    options.inPreferredConfig = Bitmap.Config.RGB_565;

                    //2.5使用设置的采样参数进行解码
                    ret = BitmapFactory.decodeByteArray(data, 0, data.length, options);

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android选取相册中的图片并对其进行压缩

Android选取相册中的图片并对其进行压缩    现在手机中相机的像素越来越高因,手机照的相片就越来越来大, 我们想通过选择相册中图片来显示在界面中,或者进行分享. 因为图片太大的原因很容易造成手机...

利用libjp库对bmp图片进行jpeg压缩

  • 2010年04月21日 21:44
  • 695KB
  • 下载

Android拍照得到全尺寸图片并进行压缩

iOS 对图片进行压缩处理

iOS 对图片进行压缩处理 在开发中,我们通常需要进行图片上传等操作,例如:上传头像等,图像本身显示的就是很小一张图片,而我们直接拍照,或者相册选取的图片通常都比较大,这时候,我们就需要对图片做相应的...

网上图片本地保存并进行压缩操作

package com.demo.wnb; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.Buff...

android 根据图片url获取bitmap或者drawable,然后再进行压缩处理

经常会遇到下面几种情况:1.通过图片url生成Bitmap对象和Drawable对象。2.对网络上获取到的图片进行压缩处理。下面提供一个工具类,以后就可以直接拿来用了。...

机器学习笔记(二)矩阵和线性代数 例:用Python实现SVD分解进行图片压缩

机器学习中涉及的一些线性代数和矩阵分析的内容,并通过一个例子来表明线性代数的应用,利用Python实现SVD分解来进行图片压缩。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对图片进行压缩
举报原因:
原因补充:

(最多只允许输入30个字)