【问题标题】:PHP-GD: Dealing with Unicode charactersPHP-GD:处理 Unicode 字符
【发布时间】:2011-02-22 04:24:35
【问题描述】:

我正在开发一个 Web 服务,它使用 PHP GD 扩展,使用用户选择的 TTF 字体呈现字符。

这在 ASCII 领域运行良好,但存在一些问题:

  1. 要呈现的字符串以 UTF-8 格式出现。我想将用户可选择的字体列表限制为只能正确呈现字符串的字体,因为某些字体只有 ASCII 字符、ISO 8601 等的字形。

  2. 在包含一些装饰字符的情况下,以所选字体呈现大部分字符并以 Arial(或包含扩展字形的任何字体)呈现装饰字符会很好。

PHP-GD 似乎不支持充分查询字体元数据来确定字符是否可以以给定字体呈现。将字体度量导入 PHP 的好方法是什么?是否有可以转储为 XML 或其他可解析格式的命令行实用程序?

【问题讨论】:

  • 给自己一个 unicode 字体。

标签: php unicode fonts gd


【解决方案1】:

针对 Pango 和 fontconfig 构建的PHP-Cairo 应该有足够的头脑在适当的时候进行字体替换。

【讨论】:

    【解决方案2】:

    您可以尝试使用 pdflib 扩展中的 pdf_info_font()。很好的例子是:http://www.pdflib.com/pdflib-cookbook/fonts/font-metrics-info/php-font-metrics-info/

    【讨论】:

      【解决方案3】:

      如果您没有 unicode 字体,则需要尝试类似

       <?php 
      $trans = new Latin1UTF8(); 
      
      $mixed = "MIXED TEXT INPUT"; 
      
      print "Original: ".$mixed; 
      print "Latin1:   ".$trans->mixed_to_latin1($mixed); 
      print "UTF-8:    ".$trans->mixed_to_utf8($mixed); 
      
      class Latin1UTF8 { 
      
          private $latin1_to_utf8; 
          private $utf8_to_latin1; 
          public function __construct() { 
              for($i=32; $i<=255; $i++) { 
                  $this->latin1_to_utf8[chr($i)] = utf8_encode(chr($i)); 
                  $this->utf8_to_latin1[utf8_encode(chr($i))] = chr($i); 
              } 
          } 
      
          public function mixed_to_latin1($text) { 
              foreach( $this->utf8_to_latin1 as $key => $val ) { 
                  $text = str_replace($key, $val, $text); 
              } 
              return $text; 
          } 
      
          public function mixed_to_utf8($text) { 
              return utf8_encode($this->mixed_to_latin1($text)); 
          } 
      } 
      ?>
      

      取自http://php.net/manual/en/function.utf8-decode.php

      如果混合字符和 utf-8 字符相等,则可以使用它。如果没有,那你就不能。

      【讨论】:

        【解决方案4】:

        我最终使用了TTX 实用程序来转储字体指标。然后我可以检查生成的 .ttx 文件并查看字符->字形映射。我是手动完成的,但是可以自动解析 XML 文件。

        一个示例 GNU Makefile,它从同一目录中的一组 TrueType 字体生成 .ttx 文件:

        all: fontmetrics
        
        fontmetrics: $(patsubst %.ttf,%.ttx,$(wildcard *.ttf))
        .PHONY: fontmetrics
        
        clean:
            rm -f *.ttx
        
        %.ttx: %.ttf
            ttx -t cmap $<
        

        【讨论】:

          猜你喜欢
          • 2017-03-27
          • 2018-12-05
          • 1970-01-01
          • 1970-01-01
          • 2012-10-03
          • 2011-11-20
          • 2014-11-10
          • 2016-03-09
          • 2019-09-04
          相关资源
          最近更新 更多