GraphicsMagick生成缩略图性能优化
To make a thumbnail of a JPEG image, use:
gm convert -size 120x120 cockatoo.jpg -resize 120x120 +profile "*" thumbnail.jpg
-size参数说明
------------------------------------------
原文:
In this example, '-size 120x120' gives a hint to the JPEG decoder that the image is going to be downscaled to 120x120,
allowing it to run faster by avoiding returning full-resolution images to GraphicsMagick for the subsequent resizing operation.
The '-resize 120x120' specifies the desired dimensions of the output image.
It will be scaled so its largest dimension is 120 pixels.
The '+profile "*"' removes any ICM, EXIF, IPTC, or other profiles that might be present in the input and aren't needed in the thumbnail.
译文:
在这个例子中,'-size 120x120'给了JPEG解码器一个暗示,图像将会缩减到120x120,
允许它运行得更快通过避免返回GraphicsMagick全分辨率图像对后续的调整操作。
'-resize 120x120'指定理想的输出图像的尺寸。
这将是按比例缩小的所以它的最大尺寸是120像素。
'+profile "*"' 删除任何ICM,EXIF,IPTC或其他资料,可能会出现在输入和不需要的缩略图。
-size 效果测试
------------------------------------------
测试环境:
OS: MAC OS X 10.7
CPU:i5 2410(双核4线程)
GM:version 1.3.7 未使用多线程(默认安装未开启openMP)
大图片测试
-----------------------------------
gm identify a.jpg
a.jpg JPEG 3040x1824+0+0 DirectClass 8-bit 2.1M 0.000u 0:01
gm benchmark -iterations 100 -stepthreads 1 convert a.jpg -resize 100x100 +profile "*" a1.jpg (耗时466ms)
Results: 1 threads 100 iter 46.64s user 46.64s total 2.144 iter/s 2.144 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 100x100 a.jpg -resize 100x100 +profile "*" a2.jpg (耗时47ms)
Results: 1 threads 100 iter 4.72s user 4.71s total 21.231 iter/s 21.186 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert a.jpg -resize 500x500 +profile "*" a3.jpg (耗时532ms)
Results: 1 threads 100 iter 53.15s user 53.40s total 1.873 iter/s 1.881 iter/cpu 1.00 speedup 1.000 karp-flatt
【GraphicsMagick生成缩略图性能优化】gm benchmark -iterations 100 -stepthreads 1 convert -size 500x500 a.jpg -resize 500x500 +profile "*" a4.jpg (耗时130ms)
Results: 1 threads 100 iter 13.06s user 13.06s total 7.657 iter/s 7.657 iter/cpu 1.00 speedup 1.000 karp-flatt
小图片测试
-----------------------------------
gm identify b.jpg
b.jpg JPEG 1024x768+0+0 DirectClass 8-bit 125.4K 0.000u 0:01
gm benchmark -iterations 100 -stepthreads 1 convert b.jpg -resize 100x100 +profile "*" b1.jpg (耗时68ms)
Results: 1 threads 100 iter 6.79s user 6.79s total 14.728 iter/s 14.728 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 100x100 b.jpg -resize 100x100 +profile "*" b2.jpg (耗时8.4ms)
Results: 1 threads 100 iter 0.83s user 0.84s total 119.048 iter/s 120.482 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert b.jpg -resize 500x500 +profile "*" b3.jpg (耗时102ms)
Results: 1 threads 100 iter 10.21s user 10.22s total 9.785 iter/s 9.794 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 500x500 b.jpg -resize 500x500 +profile "*" b4.jpg (耗时100ms)
Results: 1 threads 100 iter 10.24s user 10.26s total 9.747 iter/s 9.766 iter/cpu 1.00 speedup 1.000 karp-flatt
小图片测试
-----------------------------------
gm identify b.jpg
b.jpg JPEG 1024x768+0+0 DirectClass 8-bit 125.4K 0.000u 0:01
gm benchmark -iterations 100 -stepthreads 1 convert b.jpg -sample 100x100 +profile "*" s1.jpg (耗时16ms)
Results: 1 threads 100 iter 1.64s user 1.65s total 60.606 iter/s 60.976 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 100x100 b.jpg -sample 100x100 +profile "*" s2.jpg (耗时4.3ms)
Results: 1 threads 100 iter 0.43s user 1.51s total 66.225 iter/s 232.558 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert b.jpg -sample 500x500 +profile "*" s3.jpg (耗时26.5ms)
Results: 1 threads 100 iter 2.65s user 2.65s total 37.736 iter/s 37.736 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 500x500 b.jpg -sample 500x500 +profile "*" s4.jpg (耗时26.4ms)
Results: 1 threads 100 iter 2.64s user 2.64s total 37.879 iter/s 37.879 iter/cpu 1.00 speedup 1.000 karp-flatt
小图片测试
-----------------------------------
gm identify b.jpg
b.jpg JPEG 1024x768+0+0 DirectClass 8-bit 125.4K 0.000u 0:01
gm benchmark -iterations 100 -stepthreads 1 convert b.jpg -thumbnail 500x500 +profile "*" t1.jpg (耗时41ms)
Results: 1 threads 100 iter 4.11s user 4.22s total 23.697 iter/s 24.331 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 500x500 b.jpg -thumbnail 500x500 +profile "*" t2.jpg (耗时40ms)
Results: 1 threads 100 iter 4.06s user 4.06s total 24.631 iter/s 24.631 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert b.jpg -thumbnail 500x500 +profile "*" t3.jpg (耗时41ms)
Results: 1 threads 100 iter 4.12s user 4.13s total 24.213 iter/s 24.272 iter/cpu 1.00 speedup 1.000 karp-flatt
gm benchmark -iterations 100 -stepthreads 1 convert -size 500x500 b.jpg -thumbnail 500x500 +profile "*" t4.jpg (耗时40ms)
Results: 1 threads 100 iter 4.06s user 4.07s total 24.570 iter/s 24.631 iter/cpu 1.00 speedup 1.000 karp-flatt
总结
------------------------------------------
1、适用于生成小于300x300的小尺寸缩略图。
2、适用于原图与输出图片尺寸差距较的场景。
3、需要提前了解输入的原图的尺寸范围,应大于输出图片的尺寸。如果原图尺寸小于 -size width x height,反到无性能优化效果。
参考:http://www.graphicsmagick.org/convert.html
推荐阅读
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- ssh生成公钥秘钥
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 怎么压缩图片大小不影响质量
- 如若……
- 程序员需要知道的缩写和专业名词【转】
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- Java代码辅助效率工具Lombok(注解|Java代码辅助效率工具Lombok(注解,自动生成代码)
- python|python random使用方法