Bitmap压缩图片几种方式

图片占用内存大小计算:图片长度 x 图片宽度 x 一个像素点占用的字节数

第一种:质量压缩

优缺点:图片大小并不会改变 因为长宽高和像素都没有改变 改变的知识bytes.length会减小 png图片不会改变 png是无损的

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int quality = Integer.valueOf(editText.getText().toString());

bit.compress(CompressFormat.JPEG, quality, baos);

byte[] bytes = baos.toByteArray();

bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 / 1024) + "M宽度为" + bm.getWidth() + "高度为" + bm.getHeight() + "bytes.length= " + (bytes.length / 1024) + "KB" + "quality=" + quality);

第二种:采样率压缩

优缺点:图像宽高都为减少为原来1/options

BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; bm = BitmapFactory.decodeFile(Environment .getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/test.jpg", options); Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 / 1024) + "M宽度为" + bm.getWidth() + "高度为" + bm.getHeight());\

第三种:缩放压缩

优缺点:bitmap的长度和宽度分别缩小了一半,图片大小缩小了四分之一。

Matrix matrix = new Matrix(); matrix.setScale(0.5f, 0.5f); bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(), bit.getHeight(), matrix, true); Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 / 1024) + "M宽度为" + bm.getWidth() + "高度为" + bm.getHeight());

第四种:rgb_565

优缺点:

我们看到图片大小直接缩小了一半,长度和宽度也没有变,相比argb_8888减少了一半的内存。

注意:由于ARGB_4444的画质惨不忍睹,一般假如对图片没有透明度要求的话,可以改成RGB_565,相比ARGB_8888将节省一半的内存开销

BitmapFactory.Options options2 = new BitmapFactory.Options();

options2.inPreferredConfig = Bitmap.Config.RGB_565;

bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/test.jpg", options2); Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 / 1024) + "M宽度为" + bm.getWidth() + "高度为" + bm.getHeight());

第五种:指定长度和宽度压缩

优缺点:将图片压缩成用户所期望的长度和宽度,但是这里要说,如果用户期望的长度和宽度和原图长度宽度相差太多的话,图片会很不清晰。

bm = Bitmap.createScaledBitmap(bit, 150, 150, true); Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024) + "KB宽度为" + bm.getWidth() + "高度为" + bm.getHeight());



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值