图片缩放后size比原图大
用户调用我们的imageView2或者imagemogr2接口实现图片缩放但是设置了图片质量参数 /quality/
,发现图片的size比压缩之前大。
-
原图(63 KB)
http://7xt44n.com2.z0.glb.qiniucdn.com/%E5%8E%9F%E5%9B%BE.jpg
-
处理后( 87 KB)
http://7xkt2b.com1.z0.glb.clouddn.com/原图.jpg?imageView2/2/w/308/h/308/q/100
问题分析
影响图片的因素如下:
-
图片尺寸(像素):同样的一张图,尺寸做得越大,图片就越大,打开就越慢; 注:尺寸和像素,都是表达图片长和宽的单位。
-
图片的色彩丰富程度:色彩越丰富,颜色越多样,在同样尺寸大小时,图片越大;
-
图片的清晰度:高清,高饱和度的图片,在同样尺寸大小时,图片越大;
-
图片的格式:由于压缩比不同,图片大小与图片格式.jpg .png .webp等也有关系
其中,图片的色彩丰富程度和图片的清晰度和图片的质量因素相关。
图片分辨率对比:
-
原图分辨率:
{“format”:“jpeg”,“width”:580,“height”:580,“colorModel”:“ycbcr”}
-
压缩图分辨率:
{“format”:“jpeg”,“width”:308,“height”:308,“colorModel”:“ycbcr”}
图片质量因素对比
可以安装ImageMagick查看图片大小色度等信息的命令
-
原图的质量因素为90:
C:\Demo>identify -verbose http://7xkt2b.com1.z0.glb.clouddn.com/原图.jpg | grep Quality
Quality: 90 -
处理后图片质量因素为100:
C:\Demo>identify -verbose http://7xkt2b.com1.z0.glb.clouddn.com/原图.jpg?imageView2/2/w/308/h/308/q/100 | grep Quality
Quality: 100
很明显,用户增加图片的质量因素比缩小图片分辨率影响图片的size要大,关于图片质量可以参考如下:
保存为jpg格式为有损压缩,通俗来讲,即通过一定算法减少像素携带色彩数据的总量(注意,不是减少像素点数量)来达到压缩图片大小的效果。
比方10x10像素的图片,如果每个像素携带了1种颜色数据,则最大包含了100种不同的颜色。图片无损存储时,数据是这样记录的:x排+X列像素+颜色信息/组+下一组,共100种。当使用jpg压缩时,如果压缩比选8,通过其标准算法选取其中约20%与相邻像素数据一致,这20个像素数据只需要一个同前或同后或同上或同下的一个标记,从而减少了数据记录的长度,再读取图片时这些像素点原本的颜色数据依据算法被周围某个像素数据覆盖或差值替换了,这样就实现了压缩的效果。(以上描述仅为打比方来说明原理)。rar类压缩工具的基本原理也可以这么理解,rar是把同化数据根据算法进行归纳,并不是减少而已。所以对jpg类已经有损压缩过的图片,经过专门针对图片的优化算法,同化数据很少了,再用rar,基本没什么效果。
图像分辨率的减少,等于直接减少了像素的数量,当然就减少了数据的数量。
通过原理来看,由于涉及到像素大小,携带颜色信息量多少,压缩比等等影响的因素很多,很难说到底哪个损失大。需要具体图片具体处理。例如纯色图片,都是一个颜色,因为颜色信息一致,都是一样的,修改像素为1x1,100x100都一样,当然用1x1就可以了。比jpg效果好太多。
一般来说,日常的照片,色彩越丰富,直接减少像素对图片质量的损失比压缩成jpg要大,越简单,损失越小。另外,使用ps压缩还有一个很实用得技巧,在压缩图片时,直接修改像素大小命令尽量不用,而是通过图片变形缩小,然后裁切画布来减少像素,每个像素可保存的颜色信息远比前者要多。(可以找一张照片,直接改小像素,再改回,反复几次,然后用第二种方式反复几次,结 果第一种可能三五次图片就完全模糊了,后者虽然也模糊但效果好的多。然后再用jpg保存时,压缩比越大,获得的压缩率越低,所以一般 为8,几乎不影响,尽量不要低于6。这样尽可能保存更多的颜色信息也实现了对图片的压缩。