猿问

使用 ImageMagick 时如何修复“无法注释图像”错误?

我在 FreeBSD 11.0 服务器上使用 php 7.0.19 和 ImageMagick 6.9.6-4。我将 imagemagick 用于很多事情,但我才刚刚开始使用它在我的图像上叠加文本。我遇到的问题是,每当我尝试使用 annotateImage 功能时,都会抛出一个错误,提示“无法注释图像”。


我已经在 stackoverflow 上查看了很多与 annotateImage 相关的问题,并且我已经检查了文档以查看我是否可以自己解决问题,但我被卡住了。在其他 annotateImage 问题上,我看到有些人由于未安装特定字体而遇到问题,这也可能是我的问题,但我尝试将字体文件(ttf 文件)与我的脚本放在同一目录中我仍然有同样的问题。


运行convert -list font返回空结果,表示没有imagemagick可以直接/默认访问的字体;但是,我认为通过将字体文件包含在与我的脚本相同的目录中,我无论如何都可以使其工作。也许这是一个错误的假设?


这是我用于测试的代码:


$imagick = new Imagick('originalImage.jpg');

$draw = new ImagickDraw();

$draw->setFillColor('#ffffff');

$draw->setFont('ARIAL.TTF');

$draw->setFontSize(20);

$imagick->annotateImage($draw, 20, 100, 0, 'The quick fox jumps over the lazy dog');

$imagick->drawImage($draw);

$imagick->writeImage('finalImage.jpg');

我还尝试了其他不需要原始图像的示例脚本,并收到了相同的错误。例如,此脚本产生相同的错误:


$image = new Imagick();

$draw = new ImagickDraw();

$pixel = new ImagickPixel( 'gray' );

$image->newImage(800, 75, $pixel);

$draw->setFillColor('black');

$draw->setFont('ARIAL.TTF');

$draw->setFontSize( 30 );

$image->annotateImage($draw, 10, 45, 0, 

    'The quick brown fox jumps over the lazy dog');

$image->setImageFormat('png');

header('Content-type: image/png');

echo $image;

通过这个简单的测试,我希望在我的图像顶部添加“快速的狐狸跳过懒惰的狗”,但抛出异常并且错误消息只是说:无法注释图像。


关于如何解决错误的任何想法或建议?


慕无忌1623718
浏览 176回答 1
1回答

慕仙森

通过在imagemagick 论坛上发布这个问题,我能够弄清楚。问题是我们的 ImageMagick 安装缺少“freetype”委托,这是从字体渲染文本所必需的。
随时随地看视频慕课网APP
我要回答