Android应用中实现图片压缩的方法有哪些

  介绍

这篇文章将为大家详细讲解有关Android应用中实现图片压缩的方法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强> Android图片压缩几种方式总结

图片压缩在Android开发中很常见也很重要,防止图片的伯父也是压缩的重要原因。

首先看下位图图片文件的大小的决定因素:

位图所占用的内存=图片长度x图片宽x度一个像素点占用的字节数。3个参数,任意减少一个的值,就达到了压缩的效果。

<强>接下来看下位图图片的几种格式的特点:

ALPHA_8
,表示8位α位图,即=8,一个像素点占用1个字节,它没有颜色,只有透明度
, ARGB_4444
表示16位ARGB位图,即=4,R=4 G=4, B=4,一个像素点占4 + 4 + 4 + 4=16位,2个字节
ARGB_8888
表示32位ARGB位图,即=8,R=8 G=8, B=8,一个像素点占8 + 8 + 8 + 8=32位,4个字节
RGB_565
表示16位RGB位图,即R=5, G=6, B=5,它没有透明度,一个像素点占5 + 6 + 5=16位,2个字节

如果进行图片格式的压缩的话,一般情况下都是ARGB_8888转为RGB565进行压缩。

写了一个工具类,基本上列举了Android上图片的几种基本压缩方式:

1。质量压缩

2。采样率压缩

3。尺寸压缩

4.矩阵压缩

5。图片格式的压缩,例如PNG和JPG保存后的图片大小是不同的

公共类跑龙套{/* *
  *采样率压缩
  *
  * @param位图
  * @param sampleSize采样率为2的整数倍,非整数倍四舍五入,如4的话,就是原图的1/4
  * @return尺寸变化
  */公共静态位图getBitmap(位图的位图,int sampleSize) {
  BitmapFactory。选择选项=new BitmapFactory.Options ();
  选项。inSampleSize=sampleSize;
  ByteArrayOutputStream包=new ByteArrayOutputStream ();
  bitmap.compress (Bitmap.CompressFormat.JPEG 100包);
  byte[]字节=baos.toByteArray ();
  位图位=BitmapFactory.decodeByteArray(0字节,字节。长度,选择);
  Log.i (“info",“图片大小:“+ bit.getByteCount ());//2665296 10661184
  返回位;
  }/* *
  *图片质量压缩
  *
  * @param位图
  * @param质量
  * @return尺寸不变,质量变小
  */公共静态位图compressByQuality(位图的位图,int质量){
  ByteArrayOutputStream包=new ByteArrayOutputStream ();
  bitmap.compress (Bitmap.CompressFormat.JPEG、质量、保);
  byte[]字节=baos.toByteArray ();
  位图位=BitmapFactory.decodeByteArray(字节0 bytes.length);
  Log.i (“info",“图片大小:“+ bit.getByteCount ());//10661184
  返回位;
  }/* *
  *图片质量压缩
  *
  * @param src
  * @param maxByteSize
  * @return
  */公共静态位图compressByQuality(位图src,长maxByteSize) {
  ByteArrayOutputStream包=new ByteArrayOutputStream ();
  int质量=100;
  src.compress (Bitmap.CompressFormat.JPEG、质量、保);
  而(baos.toByteArray ()。长度比;maxByteSize,,质量比;0){
  baos.reset ();
  src.compress (Bitmap.CompressFormat.JPEG、质量-=5,包);
  }
  如果质量& lt;0)返回null;
  byte[]字节=baos.toByteArray ();
  位图位=BitmapFactory.decodeByteArray(字节0 bytes.length);
  返回位;
  }
  
  公共静态位图compressByFormat(位图的位图,int格式){
  ByteArrayOutputStream包=new ByteArrayOutputStream ();
  bitmap.compress (Bitmap.CompressFormat.JPEG 100包);
  byte[]字节=baos.toByteArray ();
  位图位=BitmapFactory.decodeByteArray(字节0 bytes.length);
  Log.i (“info",“图片大小:“+ bit.getByteCount ());//10661184
  返回位;
  }/* *
  *矩阵缩放
  *
  * @param位图
  * @param scaleWidth
  * @param scaleHeight
  * @return尺寸和大小变化
  */公共静态位图getBitmapBySize(位图的位图,scaleWidth浮动,浮动scaleHeight) {
  矩阵矩阵=new矩阵();
  矩阵。postScale (scaleWidth scaleHeight);
  位图=位图。createBitmap(位图,0,0,bitmap.getWidth (), bitmap.getHeight(),矩阵,假);
  Log.i (“info",“图片大小:“+ bit.getByteCount ());
  返回位;
  }/* *
  *按照图片格式配置压缩
  *
  * @param路径
  * @param配置ALPHA_8 ARGB_4444、ARGB_8888 RGB_565;
  * @return RGB_565比ARGB_8888节省一半内存
  */公共静态位图getBitmapByFormatConfig (String路径,位图。配置配置){
  BitmapFactory。选择选项=new BitmapFactory.Options ();
  选项。inPreferredConfig=配置;
  位图的位图=BitmapFactory.decodeFile(路径,选择);
  Log.i (“info",“图片大小:“+ bitmap.getByteCount ());
  返回位图;
  }/* *
  *指定大小缩放
  *
  * @param位图
  * @param宽度
  * @param高度
  * @return
  */公共静态位图getBitmapByScaleSize(位图的位图,int宽度,int高度){
  位图=位图。createScaledBitmap(位图,宽度,高度,真的);
  Log.i (“info",“图片大小:“+ bit.getByteCount ());
  返回位;
  }/* *
  *通过保存格式压缩
  *
  * @param位图
  * @param格式JPEG、PNG、WEBP
  * @return
  */公共静态位图getBitmapByFormat(位图的位图,位图。CompressFormat格式){
  ByteArrayOutputStream包=new ByteArrayOutputStream ();
  bitmap.compress(格式、100包);
  byte[]字节=baos.toByteArray ();
  位图位=BitmapFactory.decodeByteArray(字节0 bytes.length);
  Log.i (“info",“图片大小:“+ bit.getByteCount ());
  返回位;
  }/* *
  *文件加载压缩
  *
  * @param filePath
  * @param inSampleSize
  * @return
  */公共静态位图getBitmap(字符串filePath, int inSampleSize) {
  BitmapFactory。选择选项=new BitmapFactory.Options ();
  选项。inJustDecodeBounds=true;
  BitmapFactory.decodeFile (filePath、期权);//此时不耗费和占用内存
  选项。inSampleSize=inSampleSize;
  选项。inJustDecodeBounds=false;
  返回BitmapFactory.decodeFile (filePath选项);
  }
  
  公共静态位图getBitmap(字符串filePath) {
  返回BitmapFactory.decodeFile (filePath);
  }
  
  公共静态位图view2Bitmap(查看视图){
  如果(查看==null)返回null;
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

Android应用中实现图片压缩的方法有哪些