我正在使用以下 ImageMagick 脚本(使用 Imagick for PHP)来生成字体图像。该脚本大约需要 0.1 秒来生成约 30 个字符、大小为 48 的图像。目标速度约为 0.01 秒。恐怕切换到 GD 库可能是实现这一目标的唯一方法(我读过hereGD 中的文本生成速度要快得多)。然而,如果没有重力和修剪等特征,使用 GD 生成此类图像要麻烦得多。有没有人看到这段代码中有明显的瓶颈,或者是时候切换库了?
$image = new Imagick();
$draw = new ImagickDraw();
$background = new ImagickPixel('none');
$draw->setFont($font);
$draw->setFontSize($size);
$draw->setFillColor(new ImagickPixel('#'.$color));
$draw->setGravity(Imagick::GRAVITY_CENTER);
$draw->annotation(0, 0, $text);
$image->newImage(5*mb_strlen($text, 'UTF-8')*$size, 5*$size, $background);
$image->setImageFormat('png');
$image->drawImage($draw);
$image->trimImage(0);
$image->writeImage($path_server['dirname'].'/'.$path_server['basename']);
答案was切换库,但不切换到 GD。相反,我切换到图形魔术师,它是 ImageMagick 的一个分支,专注于效率和优化。据 GraphicsMagick 网站称,一些世界上最大的照片网站(包括 Flickr 和 Etsy)都在使用它。以下 GraphicsMagick 代码运行大约快 10 倍比相应的 ImageMagick 代码要好,它使我能够达到每次操作 0.01 秒的目标(实际上更接近 0.008 秒):
$image = new Gmagick();
$draw = new GmagickDraw();
$draw->setfont($font);
$draw->setfontsize($size);
$draw->setfillcolor('#'.$color);
$draw->setgravity(Gmagick::GRAVITY_CENTER);
$draw->annotate(0, 0, mb_ereg_replace('%', '%%', $text));
$image->newimage(5*mb_strlen($text)*$size, 5*$size, 'none', 'png');
$image->drawimage($draw);
$image->trimimage(0);
$image->writeimage($path_server['dirname'].'/'.$path_server['basename']);
您会注意到还有一些其他不错的功能。例如,不必通过创建颜色来定义颜色ImagickPixel
对象,大多数函数只是将颜色作为字符串。此外,GraphicsMagick 中的函数名称似乎更加一致(annotate代替注解)。不用说,我对此非常满意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)