Android中常用的图片压缩方式
2018-01-11 10:51
519 查看
图片压缩方式常用的有尺寸压缩、质量压缩、格式变化以及通过JNI调用libjpeg库来进行压缩,下面就先分别介绍下常见的质量压缩和尺寸压缩。(尺寸压缩,质量压缩底层也是通过调用native的方法进行压缩的,而native中的则是通过Skia这个库实现的,但是,最终还是调用了libjpeg库进行压缩的。)
1. 格式变化
现在android支持的图片格式有三种:png、jpeg、webp;
- png: 无损图片的压缩类型,能保存透明等图,它同时提供 24位和48位真彩色图像支持以及其他诸多技术性支持。
- Jpeg:有损图片的压缩类型,有损压缩方式去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像质量。但是,bitmap quality属性越小,图片的清晰度越差。
- WebP:WebP(发音 weppy,项目主页),是谷歌推出的一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。
结论:
2. 质量压缩
设置bitmap quality属性,降低图片的质量,像素不会减少(就是指bitmap所占的内存大小),第一个参数为需要压缩的bitmap图片对象,第二个参数为压缩后图片保存的位置设置quality属性0-100,来实现压缩。(因为png是无损压缩,所以该属性对png是无效的。)
3.尺寸压缩
尺寸压缩由于是减小了图片的像素,所以它直接对bitmap产生了影响,当然最终生成的file文件也是相对的变小了;
通过缩放图片像素来减少图片占用内存大小
设置图片的采样率,降低图片像素
1. 格式变化
现在android支持的图片格式有三种:png、jpeg、webp;
- png: 无损图片的压缩类型,能保存透明等图,它同时提供 24位和48位真彩色图像支持以及其他诸多技术性支持。
- Jpeg:有损图片的压缩类型,有损压缩方式去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像质量。但是,bitmap quality属性越小,图片的清晰度越差。
- WebP:WebP(发音 weppy,项目主页),是谷歌推出的一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。
结论:
2. 质量压缩
设置bitmap quality属性,降低图片的质量,像素不会减少(就是指bitmap所占的内存大小),第一个参数为需要压缩的bitmap图片对象,第二个参数为压缩后图片保存的位置设置quality属性0-100,来实现压缩。(因为png是无损压缩,所以该属性对png是无效的。)
/** * 质量压缩 * * @param format 图片格式 PNG,JPEG,WEBP * @param quality 图片的质量 1-100 */ public void compress(Bitmap.CompressFormat format, int quality) { FileOutputStream fos = null; try { //得到一个储存路径 File file = new File(Environment.getExternalStorageDirectory(), "test.jpg"); //得到一个文件输入流 fos = new FileOutputStream(file); //开始压缩 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.default_icon); bitmap.compress(format, quality, fos); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
3.尺寸压缩
尺寸压缩由于是减小了图片的像素,所以它直接对bitmap产生了影响,当然最终生成的file文件也是相对的变小了;
通过缩放图片像素来减少图片占用内存大小
public static void compressBitmapToFile(Bitmap bmp, File file){ // 尺寸压缩倍数,值越大,图片尺寸越小 int ratio = 2; // 压缩Bitmap到对应尺寸 Bitmap result = Bitmap.createBitmap(bmp.getWidth() / ratio, bmp.getHeight() / ratio, Config.ARGB_8888); Canvas canvas = new Canvas(result); Rect rect = new Rect(0, 0, bmp.getWidth() / ratio, bmp.getHeight() / ratio); canvas.drawBitmap(bmp, null, rect, null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 把压缩后的数据存放到baos中 result.compress(Bitmap.CompressFormat.JPEG, 100 ,baos); try { FileOutputStream fos = new FileOutputStream(file); fos.write(baos.toByteArray()); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } }
设置图片的采样率,降低图片像素
public static void compressBitmap(String filePath, File file){ // 数值越高,图片像素越低 int inSampleSize = 2; BitmapFactory.Options options = new ae2a BitmapFactory.Options(); //采样率 options.inSampleSize = inSampleSize; Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 把压缩后的数据存放到baos中 bitmap.compress(Bitmap.CompressFormat.JPEG, 100 ,baos); try { FileOutputStream fos = new FileOutputStream(file); fos.write(baos.toByteArray()); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } }
相关文章推荐
- bitmap的六种压缩方式,Android图片压缩
- Android 图片压缩之多种压缩方式结合使用
- android/IOS常用图片上传的两种方式
- Android中bitmap图片压缩方式
- 详解Android Bitmap的常用压缩方式
- Android图片压缩几种方式总结
- Android 图片压缩之多种压缩方式结合使用
- Android 图片压缩之多种压缩方式结合使用
- 浅谈android中加载高清大图及图片压缩方式(二)
- Android实现图片压缩(bitmap的六种压缩方式)
- bitmap的六种压缩方式,Android图片压缩
- bitmap的六种压缩方式,Android图片压缩
- android图片压缩的三种方式
- Android中常用的三种图片压缩方法
- Android图片bitmap的六种压缩方式
- android小知识——对图片的压缩方式
- Android对图片常用(拍照,图库,拖拉,压缩上传)操作
- android图片压缩的三种方式
- bitmap的六种压缩方式,Android图片压缩
- Android 图片压缩各种方式