-
背景
graphicsmagick与imagemagick测试对比,判断对于公司的图片上传,用graphicsmagick处理性能是否更优
常用指令参数说明
(a) 图片基础处理
序号 | 指令 | 描述 | 处理 |
1 | -resize '400x300' | 指定缩放大小宽x高; | 生成缩略图的宽最多为width,高最多为height,进行等比缩放(限定长边)。 |
2 | -resize '400x300^' | 指定缩放大小宽x高^; | 生成缩略图的宽最少为width,高最少为height,进行等比缩放(限定短边)。 |
3 | -resize '400x300!' | 指定缩放大小宽x高!; | 生成缩略图的宽固定为width,高固定为height(比例可能和原图不一致,图片出现变形)。 |
4 | -resize '400x300>' | 指定缩放大小宽x高> | 如果原图大于指定的width x height,则生成width x height的新图。 |
5 | -resize '400x300^>' -gravity Center -crop 400x300+0+0 +repage | 固定宽x高,居中裁剪 | 生成缩略图的宽最少为width,高最少为height,进行等比缩放,居中裁剪 |
6 | -resize '400x300>' -background white -gravity center -extent 400x300 +repage | 固定宽x高,居中补白 | 生成缩略图的宽最多为width,高最多为height,进行等比缩放,居中补白 |
(b) 图片水印处理
序号 | 指令 | 描述 | 结果 | |
1 | 图片水印{waterMark} | 1. 指定水印参数:waterMark | 默认在图片右下角打水印图片 | |
2 | 文字水印{textWaterMark} | 2.指定文字内容:textWaterMark | 默认在图片右下角打上白底文字 |
(c) 图片的其它处理(图片质量)
序号 | 指令 | 描述 | 结果 |
1 | -quality 90 | 指定图片处理的质量参数; | 以指定的质量参数对原图进行处理生成新图,该质量参数为绝对质量参数。 |
2 | 缺省 | 缺省质量参数,生成新图与原图的质量参数保持一致。 |
(d) 图像组合处理
序号 | 指令 | 描述 | 结果 |
1 | -quality 90 -resize '400x300^>' -gravity Center -crop 400x300+0+0 +repage | 1. 指定图片处理的质量参数; 2. 指定其它图片处理参数; | 原图以90的质量压缩,并按400x300等比缩放,居中裁剪成400x300的新图 |
2 | -quality 86 -resize '800>' {waterMark} | 1. 指定图片处理的质量参数; 2. 指定其它图片处理参数; 3. 指定图片打水印参数 | 原图以86的质量压缩,若宽大于800等比缩放,并在右下角打上水印 |
无论imagemagick 还是graphicsmagick软件,原图使用上述指令参数都能得到正确的图片。正常两个软件压出的图片肉眼看不出差别。
可用identify -format "%m:%f %G %Q %b \n" ./* 指令执行,得出的参数,两个软件处理的图片参数差异不大,图片质量是jpg才有
identify -format "%m:%f %G %Q %b \n" ./54497875*
JPEG:54497875_1516157105938_100x75.jpg 100x75 90 4.97KB
JPEG:54497875_1516157105938_1024.jpg 1024x768 86 169KB
WEBP:54497875_1516157105938_1024.webp 1024x768 92 82.1KB
JPEG:54497875_1516157105938_120x90.jpg 120x90 93 7.82KB
JPEG:54497875_1516157105938_180x135.jpg 180x135 93 15.2KB
%m 图片格式
%f 图片名称
%G 图片宽x高
%Q 图片质量
%b 图片大小
指令内容如下,建议采用正常尺寸(1024x768)原图测试
序号 | 指令 | imagemagick | graphicsmagick |
1 | 图片缩放 | /usr/local/sbin/bin/bin/convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' [out]{file}_400x300.{ext} | /usr/local/bin/gm convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' [out]{file}_400x300.{ext} |
2 | 缩放+裁剪 | /usr/local/sbin/bin/bin/convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' -gravity Center -crop 400x300+0+0 +repage [out]{file}_400x300.{ext} | /usr/local/bin/gm convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' -gravity Center -crop 400x300+0+0 +repage [out]{file}_400x300.{ext} |
3 | 缩放+水印 | /usr/local/sbin/bin/bin/convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' {waterMark} [out]{file}_400x300.{ext} | /usr/local/bin/gm convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' {waterMark} [out]{file}_400x300.{ext} |
4 | 缩放+裁剪+水印 | /usr/local/sbin/bin/bin/convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' -gravity Center -crop 400x300+0+0 +repage {waterMark} [out]{file}_400x300.{ext} | /usr/local/bin/gm convert -auto-orient +profile '*' [src]{file}.{ext} -quality 90 -resize '400x300>' -gravity Center -crop 400x300+0+0 +repage {waterMark} [out]{file}_400x300.{ext} |
测试一
graphicsmagick与imagemagick转换图大小对比
说明:
转换图压缩比是指转换图大小跟原图大小的比值,同一张图片,压缩比值越小代表转换处理后的图片体积越小
结论:
体积上有差异。graphicsmagick转换的图片和imagemagick 转换的图片K数不等。但graphicsmagick与imagemagick转换图压缩比的差值平均不到1%。压缩质量高于90,graphicsmagick转换的图片体积稍大。
测试二
串行处理,graphicsmagick与imagemagick 转图性能对比
说明:
响应时间比是指graphicsmagick的图片转换用时imagemagick 图片转换用时的比值,比值低于100%,说明graphicsmagick的转图用时比imagemagick 的少,意味着graphicsmagick的图片处理效率高
图片 | 来源 | 图片大小 | 图片尺寸 |
001.jpg | win7系统自带Koala.jpg图片 | 763k | 1024x768 |
002.jpg | 车型库编辑提供的实拍图片 | 673k | 1600x1200 |
003.jpg | 车型库编辑提供的数码照片 | 12.8M | 7952x5304 |
结论:
转图速度上有差异。在串行处理下graphicsmagick转图的速度比imagemagick的高。效率优化值因具体转图指令不同,graphicsmagick效率优化平均大概在20%。
其中graphicsmagick的转图性能在下述场景中比imagemagick更优,达40%
1、适用于生成小于300x300的小尺寸缩略图场景。
2、适用于原图与输出图片尺寸差距较大的场景,特别是数码相机的高清图片转图。
另:002.jpg是公司车型库实际传图,在120x90以下尺寸的转图输出下有比较好的优化,达50%,其他较大尺寸转图优化不算大,只有10%。
测试三:
graphicsmagick与imagemagick转图性能在不同用户并发下的差异
说明:
响应时间比是指graphicsmagick的图片转换用时imagemagick 图片转换用时的比值,比值低于100%,说明graphicsmagick的转图用时比imagemagick 的少,意味着graphicsmagick的图片处理效率高。
结论:
第一:打水印操作,串行执行 composite指令graphicsmagick转图的效率比imagemagick 的高,优化在20%,单张图片打水印graphicsmagick的处理用时随着并发数的递增变化不大,性能相对稳定,因此,随着并发数递增,graphicsmagick的转图性能比imagemagick 更优,高达30%。
第二:缩放、裁剪操作,串行执行 convert指令graphicsmagick转图的效率比imagemagick 的高,优化在20%;但随着并发数递增,graphicsmagick转图性能优势越发不明显,而且原图与输出图片尺寸差距越小,会出现imagemagick 的转图效率比graphicsmagick高;
第三:以graphicsmagickimagemagick车型库图片实际转图测试,单个用户图片处理graphicsmagick转图效率比imagemagick 优化20%左右。但公司图片上传用时,至少包括网络传图用时、磁盘读写用时、图片处理用时,测试单用户请求上传接口,graphicsmagick性能优化才5%。多用户请求并发,graphicsmagick优化不大。
测试结论
结合公司车型库实际转图,单用户请求接口传图,用graphicsmagick处理图片,测试优化才5%;多用户请求并发,用graphicsmagick处理并没有得到优化。所以,对于公司的图片上传,用graphicsmagick处理优化不大。