php - ImageMagick for php 比 GD 慢

标签 php linux imagemagick gd

我运行了一个小型基准测试。与 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/

相关文章:

image - 如何旋转图像而不改变其大小?

php - 关于 $.post 和 PHP sum 的简单问题

javascript - 保存图片url到Mysql数据库

linux - 脚本手动工作但不通过 crontab

android - 在 ext4 和 fat32 之间建立链接

imagemagick - 为什么 Imagemagick 或 GraphicsMagick 在调整为较小尺寸时会增加 PNG 图像的 MB 大小?

php - 将参数从 PHP 页面传递到 MySQL View

PHP:如何确定数据库连接是否打开

linux - 从第一列中提取子字符串

ruby-on-rails - 回形针 422 错误