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

我们提供的服务有:网站设计、网站建设、微信公众号开发、网站优化、网站认证、华安ssl等。为1000多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的华安网站制作公司
1、Bitmap的Compress方法(质量压缩):
public boolean compress(CompressFormat format, int quality, OutputStream stream)
参数format:表示图像的压缩格式,目前有CompressFormat.JPEG、CompressFormat.PNG、CompressFormat.WEBP。
参数quality: 图像压缩率,0-100。 0 压缩100%,100意味着不压缩。
参数stream: 写入压缩数据的输出流。
常用的用法:
public static Bitmap compress(Bitmap bitmap){
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 bitmap.compress(Bitmap.CompressFormat.JPEG, 90, baos);
 byte[] bytes = baos.toByteArray();
 return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}上面方法中通过bitmap的compress方法对bitmap进行质量压缩,10%压缩,90%不压缩。
图片的大小是没有变的,因为质量压缩不会减少图片的像素,它是在保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,这也是为什么该方法叫质量压缩方法。图片的长,宽,像素都不变,那么bitmap所占内存大小是不会变的。
quality值越小压缩后的baos越小(使用场景:在微信分享时,需要对图片的字节数组大小进行限制,这时可以使用bitmap的compress方法对图片进行质量压缩)。
2、BitmapFactory.Options的inJustDecodeBounds和inSampleSize参数(采样压缩率):
inJustDecodeBounds:当inJustDecodeBounds设置为true的时候,BitmapFactory通过decodeXXXX解码图片时,将会返回空(null)的Bitmap对象,这样可以避免Bitmap的内存分配,但是它可以返回Bitmap的宽度、高度以及MimeType。
inSampleSize: 当它小于1的时候,将会被当做1处理,如果大于1,那么就会按照比例(1 / inSampleSize)缩小bitmap的宽和高、降低分辨率,大于1时这个值将会被处置为2的倍数。例如,width=100,height=100,inSampleSize=2,那么就会将bitmap处理为,width=50,height=50,宽高降为1 / 2,像素数降为1 / 4。
常用用法:
public static Bitmap inSampleSize(Bitmap bitmap,int reqWidth,int reqHeight){
 final BitmapFactory.Options options = new BitmapFactory.Options();
 options.inJustDecodeBounds = true;
 BitmapFactory.decodeByteArray(data, 0, data.length, options);
 options.inSampleSize = calculateInSampleSize(options, reqWidth,
   reqHeight);
 options.inJustDecodeBounds = false;
 return BitmapFactory.decodeByteArray(data, 0, data.length, options);
}
public static int calculateInSampleSize(BitmapFactory.Options options,
          int reqWidth, int reqHeight) {
 final int picheight = options.outHeight;
 final int picwidth = options.outWidth;
 int targetheight = picheight;
 int targetwidth = picwidth;
 int inSampleSize = 1;
 if (targetheight > reqHeight || targetwidth > reqWidth) {
  while (targetheight >= reqHeight
    && targetwidth >= reqWidth) {
   inSampleSize += 1;
   targetheight = picheight / inSampleSize;
   targetwidth = picwidth / inSampleSize;
  }
 }
 return inSampleSize;
}
}inSampleSize方法中先将inJustDecodeBounds设置为false,在通过BitmapFactory的decodeXXXX方法解码图片,返回空(null)的Bitmap对象,同时获取了bitmap的宽高,再通过calculateInSampleSize方法根据原bitmap的 宽高和目标宽高计算出合适的inSampleSize,最后将inJustDecodeBounds设置为true,通过BitmapFactory的decodeXXXX方法解码图片(使用场景:比如读取本地图片时,防止Bitmap过大导致内存溢出)。
3、通过Matrix压缩图片
Matrix matrix = new Matrix(); matrix.setScale(0.5f, 0.5f); bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(),bit.getHeight(), matrix, true); }
使用场景:自定义View时,对图片进行缩放、旋转、位移以及倾斜等操作,常见的就是对图片进行缩放处理,以及圆角图片等。
关于Android中有哪些图片压缩方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
当前题目:Android中有哪些图片压缩方式
分享路径:http://www.scyingshan.cn/article/pocjih.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 