【问题标题】:Rendering complex fonts/scripts in PHP?在 PHP 中渲染复杂的字体/脚本?
【发布时间】:2017-03-28 18:20:54
【问题描述】:

希望以各种语言/脚本呈现复杂字体(带有变音符号、连接字形、从右到左的文本),输出是图像(不是网页),理想情况下需要使用 PHP。 PHP、Imagick、GD常用的内置图形库,不支持复杂字体,相信是因为他们自带的Freetype版本不支持。

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

对此有更简单的解决方案有什么想法吗?

谢谢

【问题讨论】:

    标签: php fonts webfonts


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我也经常遇到这个问题,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' />";
      

      如果您发现代码有任何困难,请告诉我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 2011-11-17
        • 2016-08-25
        • 1970-01-01
        • 2020-03-29
        • 2019-03-09
        • 1970-01-01
        相关资源
        最近更新 更多