android 图片压缩 笔记

   两个重要的方法。和代码  
质量压缩。--像素不变  ---该方法是把bimmap生成文件。 ---质量压缩读出来的bitmap大小不变。所以不能用于直接显示

    /**
     * 质量压缩。
     * @param bmp  ---- 需要压缩的bmp
     * @param path ---- 压缩之后储存的文件名字 -- 全部路径
     * @param options - 需要要压缩到百分之几十 
     */
    public static void compressBmpToFile(Bitmap bmp,String path , int options){
        File mFile = new File(path);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
//        options = 30;//30不会失真 
        bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);  
//        while (baos.toByteArray().length / 1024 > 500) {   这里的循环压缩是没有用的
//            baos.reset();  
//            options -= 2;  
//            bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);  
//        }  
        try {  
            FileOutputStream fos = new FileOutputStream(mFile);  
            fos.write(baos.toByteArray());  
            fos.flush();  
            fos.close(); 
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

尺寸压缩/比例压缩 --- 读出来的bitmap较小。可以用于内存优化
--该方法是把文件读出来。但不是直接读。而是压缩了再读。生成bitmap  --这个bitmap可以重新写回sd卡。也可以显示

    /**
     * 图片按比例大小压缩方法---也就是尺寸压缩。说到底。就是通过 newOpts.inSampleSize 来改变他的大小。
     * 但是decode呢只decode 计算长宽。不分配空间。再通过计算出来的inSampleSize大小。重新decode。--计算inSampleSize该方法里有
     * 所以说在显示大图的时候。不能直接decode。需要计算出一个inSampleSize值。再decode出来bitmap。用于显示
     * 
     * @param srcPath (根据路径获取图片并压缩)
     * @return bitmap
     */  
    public static Bitmap getimage(String srcPath) {  

        BitmapFactory.Options newOpts = new BitmapFactory.Options();  
        // 开始读入图片,此时把options.inJustDecodeBounds 设回true了  
        newOpts.inJustDecodeBounds = true;  
        Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空  

        newOpts.inJustDecodeBounds = false;  
        int w = newOpts.outWidth;  
        int h = newOpts.outHeight;  
        // 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为  
        float hh = 800f;// 这里设置高度为800f  
        float ww = 480f;// 这里设置宽度为480f  
        // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可  
        int be = 1;// be=1表示不缩放  
        if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放  
            be = (int) (newOpts.outWidth / ww);  
        } else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放  
            be = (int) (newOpts.outHeight / hh);  
        }  
        if (be <= 0)  
            be = 1;  
        newOpts.inSampleSize = be;// 设置缩放比例  
        // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了  
        bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  
        return bitmap;// 压缩好比例大小后再进行质量压缩  
    }  


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值