2016-08-19 2 views
0

Ich betreibe einen kleinen Benchmark. Gleicher einfacher Textzeichnungsvorgang mit GD und ImageMagick Siehe Code unten.ImageMagic für PHP langsam im Vergleich zu GD

Auf dem Dev-Server läuft die GD-Version in 1,9 Sekunden und die ImageMagic in 7,3 Sekunden. Dies ist über mehrere Tests hinweg konsistent.

Unter Linux die GD ver läuft in 2,5 sec und IM in 4 sec

(beide einschließlich roundtip aber die Tests wurden mehrere Zeit auf dem gleichen Server/Client und seine konsequente getan) Was IM langsamer als GD macht? Gibt es eine Möglichkeit, es zu optimieren? Was kann ich tun, um die gleiche Leistung zu erzielen?

Benchmark Code 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); 

Benchmark-Code 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 Info

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 Info

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 
+0

Keine Ahnung, ob es einen Unterschied macht, aber vielleicht versuchen Sie zuerst all Ihre 'Arial'-Schriftarten, dann all Ihre' Arib'-Sachen, anstatt die Schriftarten zu ändern und Schriftdateien zu lesen. Nur ein Tipp - nicht getestet. Übrigens läuft die IM-Version in 1.9s auf meinem Mac mit v6.9 –

Antwort

0

Es kann daran liegen, dass GD mit Bit-Tiefe = 8 gegenüber IM mit Bit-Tiefe = 16 arbeitet. Versuchen

$draw -> setImageDepth (8); 

Alternativ, wenn Sie die Kontrolle über Ihren Server haben, versuchen Sie die Installation des „Q8“ Build von ImageMagick anstelle des „Q16“ bauen, dass Sie jetzt haben (und wenn Sie schon dabei sind, erhalten eine aktuelle Version von ImageMagick; 6.7.7 ist sehr alt).

Verwandte Themen