【发布时间】:2016-08-19 12:28:37
【问题描述】:
我运行了一个小型基准测试。使用 GD 和 ImageMagick 进行相同的简单文本绘制操作参见下面的代码。
在开发服务器上,GD 版本在 1.9 秒内运行,ImageMagic 在 7.3 秒内运行。这在多个测试中是一致的。
在 Linux 上,GD 版本在 2.5 秒内运行,IM 在 4 秒内运行(两者都包括 roundtip,但测试在同一个服务器/客户端上进行了多次并且其一致)
是什么让 IM 比 GD 慢?有没有办法优化它我该怎么做才能获得相同的性能?
基准代码 GD:
$base_image=imagecreatetruecolor ( 350, 700 );
$white = imagecolorallocatealpha($base_image, 255, 255, 255, 100);
imagefill($base_image , 0, 0, $white);
imagealphablending($base_image, true);
imagesavealpha($base_image, true);
$black = imagecolorallocatealpha ($base_image, 0,0,0, 1);
for ($i =0; $i<700; $i ++) {
imagettftext($base_image, 13, 0, 20, $i, $black, './arial.ttf', "Hello World!");
imagettftext($base_image, 13, 0, 20, $i, $black, './arib____.ttf', "Hello World!");
imagettftext($base_image, 13, 0, 20, $i, $black, './verdana.ttf', "Hello World!");
imagettftext($base_image, 13, 0, 20, $i, $black, './trebuc.ttf', "Hello World!");
imagettftext($base_image, 13, 0, 20, $i, $black, './georgia.ttf', "Hello World!");
}
header("Content-Type: image/png");
imagepng($base_image);
基准代码 IM:
$canvas = new Imagick();
$canvas->newImage(350, 700, "white");
$draw = new ImagickDraw();
$draw->setFontSize(13*96/72);
for ($i =0; $i<700; $i ++) {
$draw->setFont('./arial.ttf');
$draw->annotation(20, $i, "Hello World!");
$draw->setFont('./arib____.ttf');
$draw->annotation(20, $i, "Hello World!");
$draw->setFont('./verdana.ttf');
$draw->annotation(20, $i, "Hello World!");
$draw->setFont('./trebuc.ttf');
$draw->annotation(20, $i, "Hello World!");
$draw->setFont('./georgia.ttf');
$draw->annotation(20, $i, "Hello World!");
}
$canvas->drawImage($draw);
$canvas->setImageFormat('png');
header("Content-Type: image/png");
echo $canvas;
GD信息
GD Support enabled
GD Version 2.1.1-dev
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.5.2
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 8
PNG Support enabled
libPNG Version 1.2.50
WBMP Support enabled
XPM Support enabled
libXpm Version 30411
XBM Support enabled
WebP Support enabled
Imagick 信息
imagick module enabled imagick module version 3.1.2 imagick classes Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator ImageMagick version ImageMagick 6.7.7-10 2016-06-01 Q16 http://www.imagemagick.org ImageMagick copyright Copyright (C) 1999-2012 ImageMagick Studio LLC ImageMagick release date 2016-06-01 ImageMagick number of supported formats: 204 ImageMagick supported formats 3FR, A, AAI, AI, ART, ARW, AVI, AVS, B, BGR, BGRA, BIE, BMP, BMP2, BMP3, BRF, C, CAL, CALS, CANVAS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CRW, CUR, CUT, DCM, DCR, DCX, DDS, DFONT, DNG, DPX, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, FAX, FITS, FRACTAL, FTS, G, G3, GIF, GIF87, GRADIENT, GRAY, GROUP4, HALD, HDR, HISTOGRAM, HRZ, HTM, HTML, ICB, ICO, ICON, INFO, INLINE, IPL, ISOBRL, J2C, J2K, JBG, JBIG, JNG, JP2, JPC, JPEG, JPG, JPX, K, K25, KDC, LABEL, M, M2V, M4V, MAC, MAP, MAT, MATTE, MEF, MIFF, MNG, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MTV, MVG, NEF, NRW, NULL, O, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSB, PSD, PTIF, PWP, R, RADIAL-GRADIENT, RAF, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, SR2, SRF, STEGANO, SUN, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMV, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, Y, YCbCr, YCbCrA, YUV
Directive Local Value Master Value imagick.locale_fix 0 0 imagick.progress_monitor 0 0
【问题讨论】:
-
不知道它是否有区别,但也许先尝试做所有
arial字体的东西,然后再做所有arib的东西,而不是不断更改字体和阅读字体文件。只是一个猜测 - 未经测试。顺便说一句,IM版本在我的Mac上用v6.9运行1.9s
标签: php linux imagemagick gd