图片压缩

来源:互联网 发布:杭州市大数据局 编辑:程序博客网 时间:2024/05/27 14:14
图片压缩简介:
图片的压缩:(分辨率压缩/像素压缩,质量压缩)

分辨率压缩个人理解:
利用 bitmap = BitmapFactory.decodeFile(path, newOpts.inSampleSize像素比率); 得到显示的bitmap,而且还可以进行输出的质量压缩,即利用
bitmap.compress(有损JPEG或无损压缩png,quality,);

质量压缩有两种:
  有损压缩:将色相和色纯度相近的色素合并,使图片信息减少,达到降质压缩效果,仅仅通过减少重复达到缩小体积目的(如:JPEG 格式);
    无损压缩:将相同的色素只保留一次,是对文件的数据存储方式进行优化,解压后仍能还原以前的像素数的压缩(如:PNG 格式);
也就是说,bitmap.compress()参数采用PNG格式的,就是默认使用的是无损压缩方式,同时透明度效果有效,而若采用JPEG格式的,默认使用的是有损压缩,无透明效果;

额外部分:
打印机使用 DPI 来确定图片的每一个像素和实际的一个长度单位(英寸)之间的大小比例(比如300-72 DPI)。
图片像素密度:单位英寸内像素点的个数;
图片分辨率:屏幕中横纵向像素值的乘机;
图片尺寸越大则像素密度越小,而分辨率其实还是没变的;

代码示例:

实例结果:
   D/file1 图片未压缩大小: 31961088       
   D/file2:图片像素压缩后图片大小: 124848  文件经过图片解析,使得内存占用加大     
   D/file2:图片像素压缩后文件大小:  40185  图片文件在硬盘中存储大小,该文件大小大于其输出流大小
   D/file3:图片质量压缩后图片大小: 124848   质量压缩后只是图片文件存储大小变小,而用于显示的分辨率未变
   D/file3:图片质量压缩后文件大小:  23242   

注意:保存图片的文件大小一定小于Bitmap大小,因为Bitmap是经过文件解析后显示的数字图片数据,而图片文件的输出流大小也一定会小于文件;

总结:
    决定图片显示时占内存大小的决定因素,就是图片的分辨率,所以在图片显示时,可采用分辨率压缩(bitmap = BitmapFactory.decodeFile(path, newOpts.inSampleSize像素比率)),使图片显示时少占用空间;
若减小图片存储占用内存,可采用分辨率压缩和质量压缩(bitmap.compress(有损JPEG或无损压缩png,quality,))相结合方式实现;

0 0
原创粉丝点击