在PHP中渲染复杂的字体/脚本?

时间:2016-11-15 00:30:39

标签: php fonts webfonts

想要在各种语言/脚本中渲染复杂字体(带变音符号,连接字形,从右到左文本),输出是图像(不是网页),理想情况下需要使用PHP。 PHP,Imagick和GD的常用图形库不支持复杂字体,我相信因为它们附带的Freetype版本并不支持它。

我已经开始研究自定义构建PHP并获得可能的支持,但它看起来非常复杂和混乱。

对此更简单的解决方案的想法?

由于

2 个答案:

答案 0 :(得分:1)

这也是我遇到的一个问题,imagettftext是最常用的GD函数在图像上写文字,但问题是它无法渲染复杂的unicode字符,所以只要你的语言没有复杂的字符,我们很好。

要渲染复杂的unicode字符,您可能需要在服务器上安装imagick安装加pango。大多数托管服务提供商没有安装pango,这意味着您需要为您的应用程序准备好专用服务器。

大多数Linux发行版都预先安装了pango,所以如果你设法在本地linux imagick上安装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 :(得分:0)

我无法发表评论,但如果它是Unicode(我认为是AFAIK),您可以使用字符映射并从PHP代码中回显它。您可能需要插入<meta>以使页面成为Unicode的某种变体(抱歉,我对Unicode不太了解)。