对图片进行压缩

原创 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);

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

相关文章推荐

对图片进行压缩

对图片进行二次采样的时候计算压缩之后的尺寸/** * 官方计算代码 * 根据用户所给出的宽度和高度计算出来压缩比例 * @param options * @pa...

对图片进行压缩

目前在开发一个app应用,在移动端上传头像时,需要对头像图片进行压缩,在网上查找了一些方法,整理了一下,供各位学习。 下面粘贴的是我们项目用到的一个完整的类,都有相应的注释,相信大家会一目了然的! ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

对图片进行压缩

对图片进行二次采样的时候计算压缩之后的尺寸 /**      * 官方计算代码      * 根据用户所给出的宽度和高度计算出来压缩比例      * @param o...

Android对图片进行压缩

Android对图片进行压缩 分类: Android相关 Android设备的内存有限,对于大图片,必须进行压缩后再进行显示,否则会出现内存溢出:OOM; 处理大图片: ...

Android对图片进行压缩

Android设备的内存有限,对于大图片,必须进行压缩后再进行显示,否则会出闲内存溢出:OOM; 处理大图片: 1.使用缩略图(Thumbnails); Android系统会给检测到的图片创建缩略图;...

iOS 对图片进行压缩处理

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

【图片压缩】使用canvas,html5进行图片压缩

首先html中有个input file的按钮,能选择图片上传 javascript部分 var isiOS = navigator.userAgent.ma...

使用libjpeg对图像进行压缩

libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。Libjpeg不仅可以把bmp格式转化成jpg格式,还支持其他格式的转化成jpg格式...

图片压缩

///         /// 通过图片存储的物理路径以指定的宽高压缩图片并保存到指定的路径         ///         /// 图片物理路径   ...

图片压缩

做上传图片功能,特别是类似于微信,QQ里面,发布9张图片, 少不了碰到一个问题,就是图片压缩问题,当然我也遇到了. 我研究了这个问题,发现网上普遍的方法是如下 //压缩图片质量...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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