我运行了一个小型基准测试。与 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 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 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
最佳答案
这可能是由于 GD 使用位深度 = 8 而 IM 使用位深度 = 16。尝试
$draw -> setImageDepth ( 8 );
或者,如果您可以控制您的服务器,请尝试安装 ImageMagick 的“Q8”版本来代替您现在拥有的“Q16”版本(当您安装它时,获取 ImageMagick 的当前版本; 6.7.7 很旧)。
关于php - ImageMagick for php 比 GD 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039072/