У нас есть микросервис для обработки изображений, который создает многофункциональные изображения с текстом поверх него, и мы находимся в процессе добавления арабского языка на наш веб-сайт.
При переводе некоторого содержимого на арабский язык наш переводчик сказал нам, что текст на сгенерированных изображениях отображается неправильно на арабском языке — они отображаются без лигатур, поэтому каждый символ разделен.
В настоящее время мы используем ImageMagick (6.8.9-9) с PHP, а для генерации текста использовался ImagickDraw-> annotateImage, который работал нормально, пока мы не столкнулись с проблемой лигатур.
Я немного погуглил и нашел «pango», который решает эту проблему, а также позволяет использовать своего рода синтаксис «html» для определения нескольких настроек для одной текстовой строки, что довольно круто.
Проблема в том, что я не нашел способа использовать файлы пользовательских шрифтов
Это код:
$img = new \Imagick;
$img->newImage($width, $height, new ImagickPixel('transparent'));
$img->setBackgroundColor(new ImagickPixel('transparent'));
$img->setFont($fontFile); // didn't work
$img->setPointSize($fontSize);
$img->setOption("font", $fontFile); // didn't work
$img->newPseudoImage($width, $height, "pango:<span font='".$fontName."' foreground='".$textColor."'>".$text."</span>"); // font='".$fontName."' - also didn't work
Я также пытался установить шрифт в ОС Ubuntu и использовать только имя шрифта, но это тоже не сработало, а также сочетал все перечисленные выше варианты или некоторые из них.
Я нашел этот вопрос:
PHP Imagick не использует пользовательский шрифт > конвертировать делает. Но он сказал, что использовал «заголовок» вместо «панго» — что не обеспечивает такой крутой «HTML» синтаксис и не решает арабскую проблему.
Пожалуйста — если вы знаете какое-либо решение, я буду любить вас вечно!
Благодарю.
Задача ещё не решена.
Других решений пока нет …