目标

图片处理有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:普通图片,画质好,没什么特殊的。