Рендеринг сложных шрифтов / скриптов в PHP?

Если вы хотите визуализировать сложные шрифты (с диакритическими знаками, соединенными глифами, справа налево) на разных языках / скриптах, выводом является изображение (не веб-страница), в идеале нужно использовать PHP. Обычно встроенные графические библиотеки для PHP, Imagick и GD не поддерживают сложные шрифты, я полагаю, потому что версия Freetype, которую они поставляют, не поддерживает ее.

Я рассмотрел пользовательскую сборку PHP с возможной поддержкой, но она выглядит ужасно сложной и грязной.

Есть мысли о более простом решении для этого?

Спасибо

0

Решение

С этой проблемой я тоже много сталкивался, imagettftext это наиболее часто используемая функция GD для написания текста на изображении, но проблема в том, что он не может отображать сложные символы Юникода, поэтому, пока ваш язык не содержит сложных символов, мы хороши.

Для рендеринга сложных символов Юникода вам может понадобиться imagick установка плюс pango установлен на вашем сервере. Большинство хостинг-провайдеров не имеют установленного pango, поэтому вам нужно иметь выделенный сервер, готовый для вашего приложения.

большинство дистрибутивов Linux поставляется с pango предварительно установлен, так что если вам удалось установить imagick на вашем местном Linux matchine следующий код должен работать без проблем

/* complex unicode string */
$text = "වෙබ් මත ඕනෑම තැනක";

$im = new \Imagick();
$background = new \ImagickPixel('none');
$im->setBackgroundColor($background);
$im->setPointSize(30);
$im->setGravity(\Imagick::GRAVITY_EAST);
$im->newPseudoImage(300, 200, "pango:" . $text );
$im->setImageFormat("png");
$image = imagecreatefromstring($im->getImageBlob());

//just for print out to the browser
ob_start();
imagepng($image);
$base64 = base64_encode(ob_get_clean());
$url =  "data:image/png;base64,$base64";
echo "<img src='$url' />";

Дайте мне знать, если вы обнаружите какие-либо трудности с кодом

1

Другие решения

Я не могу комментировать, но если это Unicode (AFAIK, я думаю, что это так), вы можете использовать карту символов и вывести ее из кода PHP. Вам, вероятно, нужно вставить <meta> сделать страницу определенным вариантом Unicode (извините, я не знаю слишком много о Unicode).

0

По вопросам рекламы [email protected]