2016-08-19 2 views
0

작은 벤치 마크를 실행합니다. GD 및 ImageMagick을 사용한 간단한 텍스트 그리기 작업 아래 코드를 참조하십시오.ImageMagic for PHP는 GD에 비해 느림

dev 서버의 GD 버전은 1.9 초, ImageMagic은 7.3 초입니다. 이것은 여러 테스트에서 일관 적입니다.

리눅스에 4 초에서 2.5 초에서 실행 IM 버전 GD IM은 GD보다 느리게 만드는 것

(모두 포함 roundtip하지만 테스트는 동일한 서버/클라이언트와의 일관성에 여러 시간을 일했다)? 그것을 최적화하는 방법이 있습니까 동일한 성능을 얻으려면 어떻게해야합니까?

벤치 마크 코드 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 
+0

차이가 있는지는 모르겠지만 글꼴을 계속 변경하고 글꼴 파일을 읽는 대신 모든'arib' 글꼴을 먼저 처리 한 다음 모든'arib' 작업을 시도해보십시오. 그냥 추측 - 테스트되지 않았습니다. 그건 그렇고, 메신저 버전은 내 Mac에서 v9.9 1.9s에서 실행됩니다. –

답변

0

GD가 비트 심도 = 8 일 때 IM이 비트 심도 = 16을 사용하기 때문일 수 있습니다. 당신이 그것에있는 동안, 또는

$draw -> setImageDepth (8); 

을 시도하면 서버를 제어 할 경우, 당신이 지금 가지고 빌드 "Q16"대신 ImageMagick과의 "Q8"빌드를 설치하십시오 (와하는 얻을 ImageMagick의 현재 버전, 6.7.7은 매우 오래되었습니다.)

관련 문제