在 PHP 中呈现复杂的 fonts/scripts?
Rendering complex fonts/scripts in PHP?
想要在各种 languages/scripts 中呈现复杂字体(带有变音符号、连接的字形、从右到左的文本),输出是图像(不是网页),理想情况下需要使用 PHP。 PHP、Imagick 和 GD 的常用内置图形库不支持复杂字体,我相信是因为它们附带的 Freetype 版本不支持它。
我已经研究了定制建筑 PHP 并获得了可能的支持,但它看起来非常复杂和凌乱。
对此有更简单的解决方案吗?
谢谢
我无法发表评论,但如果它是 Unicode(我认为是 AFAIK),您可以使用字符映射并从 PHP 代码回显它。您可能需要插入 <meta>
以使页面成为 Unicode 的特定变体(抱歉,我对 Unicode 了解不多)。
这个问题我也遇到过很多,imagettftext
是最常用的GD函数在图片上写文字,但问题是它不能渲染复杂的unicode字符,所以只要由于您的语言没有复杂的字符,我们很擅长。
要呈现复杂的 Unicode 字符,您可能需要 imagick
安装并在您的服务器上安装 pango
。大多数托管服务提供商都没有安装 pango,这意味着您需要为您的应用程序准备好专用服务器。
大多数 linux 发行版都预装了 pango
,因此如果您设法在本地 linux matchine
上安装了 imagick
,则以下代码应该工作没有任何问题
/* 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' />";
如果您发现代码有任何困难,请告诉我
想要在各种 languages/scripts 中呈现复杂字体(带有变音符号、连接的字形、从右到左的文本),输出是图像(不是网页),理想情况下需要使用 PHP。 PHP、Imagick 和 GD 的常用内置图形库不支持复杂字体,我相信是因为它们附带的 Freetype 版本不支持它。
我已经研究了定制建筑 PHP 并获得了可能的支持,但它看起来非常复杂和凌乱。
对此有更简单的解决方案吗?
谢谢
我无法发表评论,但如果它是 Unicode(我认为是 AFAIK),您可以使用字符映射并从 PHP 代码回显它。您可能需要插入 <meta>
以使页面成为 Unicode 的特定变体(抱歉,我对 Unicode 了解不多)。
这个问题我也遇到过很多,imagettftext
是最常用的GD函数在图片上写文字,但问题是它不能渲染复杂的unicode字符,所以只要由于您的语言没有复杂的字符,我们很擅长。
要呈现复杂的 Unicode 字符,您可能需要 imagick
安装并在您的服务器上安装 pango
。大多数托管服务提供商都没有安装 pango,这意味着您需要为您的应用程序准备好专用服务器。
大多数 linux 发行版都预装了 pango
,因此如果您设法在本地 linux matchine
上安装了 imagick
,则以下代码应该工作没有任何问题
/* 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' />";
如果您发现代码有任何困难,请告诉我