Как исправить ошибку «Невозможно аннотировать изображение» при использовании ImageMagick? - PullRequest
1 голос
/ 21 мая 2019

Я использую php 7.0.19 и ImageMagick 6.9.6-4 на сервере FreeBSD 11.0. Я использую imagemagick для нескольких вещей, но я только начинаю использовать его для наложения текста поверх моих изображений. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь использовать функциональность annotateImage, выдается ошибка, которая просто говорит: «Невозможно аннотировать изображение».

Я просмотрел довольно много вопросов, связанных с annotateImage, здесь на stackoverflow, и я проверил документы, чтобы посмотреть, смогу ли я решить проблему самостоятельно, но я застрял. По другим вопросам 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;

В этом простом тесте я ожидал добавить «Быстрая лиса перепрыгивает через ленивую собаку» поверх моего изображения, но вместо этого выдается исключение, и в сообщении об ошибке просто говорится: «Невозможно аннотировать изображение».

Любые идеи или предложения о том, как я могу устранить ошибку?

Спасибо!

1 Ответ

1 голос
/ 23 мая 2019

Публикуя этот вопрос на форуме imagemagick , я смог понять его. Проблема заключалась в том, что в нашей установке ImageMagick отсутствует делегат 'freetype', который необходим для визуализации текста из шрифтов.

Спасибо!

...