【问题标题】:ImageMagic for php slow compared to GD与 GD 相比,用于 php 的 ImageMagick 慢
【发布时间】: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


【解决方案1】:

这可能是由于 GD 使用 bit-depth=8 而 IM 使用 bit-depth=16。试试

$draw -> setImageDepth ( 8 );

或者,如果您可以控制您的服务器,请尝试安装 ImageMagick 的“Q8”版本来代替您现在拥有的“Q16”版本(当您使用它时,获取 ImageMagick 的当前版本; 6.7.7 已经很老了)。

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2015-11-24
    • 2011-03-30
    • 2013-08-28
    • 2017-01-15
    • 1970-01-01
    • 2016-01-19
    • 2017-05-07
    相关资源
    最近更新 更多