目标
图片处理有3套方案,分别是GraphicsMagick、SimpleImage、Thumbnails,通过使用这3个图片处理技术,来处理同一张图片,对比性能、稳定性。
测试方法
准备了N张图片,分别使用3个图片处理技术,来生成180x180像素的缩略图10次,其它条件都一样,记录耗时。
注: GraphicsMagick未使用c的多线程库,是单线程运行的。
服务器配置
服务器使用赵磊的笔记本电脑
操作系统:Mac OS
cpu:英特尔 i5 笔记本低压
内存:8G
测试结论
GraphicsMagick:性能最好,稳定好。
Thumbnails:性能不好,稳定最差。 不建议使用。
SimpleImage:性能不好,稳定好。
GraphicsMagick:测试10的问题是开发使用问题不是GraphicsMagick自身问题,测试8未知。
Thumbnails: 测试9由于使用了CMYK转换才得以正常,但影响了性能。测试2报错原因未知。测试6、7、11发生偏色
SimpleImage:测试1、7 由于使用了容错 才得以正常,但影响了性能。
结论:在开发环境请使用SimpleImage,在生产环境请使用GraphicsMagick。
测试数据
命令:ImageProcess.resize( inputStream , 180 , 180 , 90 , “jpg” );
以下测试出来的耗时是10次的总耗时,单位ms
编号 | 图片 | 文件大小 | 文件宽高 | 说明 | GraphicsMagick | Thumbnails | SimpleImage |
---|---|---|---|---|---|---|---|
1 | a1.jpg | 1.8MB | 普通图片 |
913 |
6477 |
14107 |
|
2 | b1.jpg | 9MB | 普通图片 |
2132 |
报错 |
3475 |
|
3 | c1.jpg | 0.9MB | 普通图片 |
603 |
4713 |
6480 |
|
4 | e1.jpg | 1.2MB | 普通图片 |
1833 |
41499 |
27122 |
|
5 | f1.jpg | 3.7MB | 普通图片 |
1297 |
9134 |
23203 |
|
6 |
变色.jpg |
126KB | 800x800 | 问题图片 |
406 |
1057 生成的图片发生变色,变红了 |
1809 |
7 |
透明.png |
20KB | 191x193 | 有透明背景的png, 输出png |
393 |
620 生成的图片 透明背景变黑了 |
900 |
8 | 透明.png | 20KB | 191x193 | 有透明背景的png,输出jpg |
401 生成的图片 透明背景变黑了 |
711 生成的图片 透明背景变黑了 |
914 |
9 |
8位cmyk.jpg |
754KB | 253x405 | CMYK色彩空间的图片 |
613 |
1542 |
1073 |
10 | g1.gif | 310KB | 800x600 | 动画,输出gif |
1014 能动画,但第二 帧以后未缩图 |
1104 发生中度偏色, 只留下了第一帧 |
1901 只留下了第一帧 |
11 | g1.gif | 310KB | 800x600 | 动画,输出jpg | 670 |
1183 发生中度偏色 |
1818 |
12 | 2万像素的大图.jpg | 48MB | 23633x23622 | 超大图 |
23178 |
内存溢出 | 内存溢出 |
材料说明
在这里准备了一批图片,用于测试图片处理程序。
包含多种常用的图片格式,多种大小的图片。
测试:生成缩略图、切图、获取图片信息等操作。
文件夹说明:
变色:使用java对此图片生成缩略图后,生成的图片会发红变色,这是一种程序错误。本图片本用于演示这种错误。
大图:是大体积的图片,用于极限测试、分析处理图片时对内存的消耗。
手机:产品图片,没什么特殊的。
透明背景图:是png的透明背景图片,java对此图片生成缩略图后,生成的图片会背景变黑,这是一种程序错误。本图片本用于演示这种错误。
cmyk:是使用了CMYK色彩空间的图片,java对此图片生成缩略图会报错,无法生成,这是一种程序错误。本图片本用于演示这种错误。
GIF:动画图片。
JPEG:普通图片,画质好,没什么特殊的。
PNG:普通图片,画质好,没什么特殊的。