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

时间:2019-05-21 16:21:53

标签: php imagick

我在FreeBSD 11.0服务器上使用php 7.0.19和ImageMagick 6.9.6-4。我将imagemagick用于很多方面,但是我刚开始使用它来在图像上覆盖文本。我遇到的问题是,每当我尝试使用annotateImage功能时,都会抛出一条错误消息,提示您“无法对图像进行注释”。

我在stackoverflow上浏览了很多与anateateImage有关的问题,并且检查了文档以查看是否可以自行解决问题,但我遇到了麻烦。在其他anantateImage问题上,我发现某些人由于未安装特定字体而遇到麻烦,这也可能是我的问题,但是我尝试将字体文件(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;

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

通过在imagemagick forum上发布此问题,我得以弄清楚。问题在于我们的ImageMagick安装缺少“ freetype”委托,而从字体呈现文本则需要该委托。

谢谢!