【问题标题】:Display all font file characters显示所有字体文件字符
【发布时间】:2012-09-20 07:34:25
【问题描述】:

我想知道是否有办法使用 HTML/CSS/JS/PHP 显示所有字体文件字符?

假设我想显示所有可能的“Arial”字符。或者来自自定义@font-face 字体的字符。

【问题讨论】:

    标签: php javascript jquery fonts


    【解决方案1】:

    我想建议你试试GD库imagettftext()函数。 手册示例:

    // Set the content-type
    header('Content-Type: image/png');
    
    // Create the image
    $im = imagecreatetruecolor(400, 30);
    
    // Create some colors
    $white = imagecolorallocate($im, 255, 255, 255);
    $grey = imagecolorallocate($im, 128, 128, 128);
    $black = imagecolorallocate($im, 0, 0, 0);
    imagefilledrectangle($im, 0, 0, 399, 29, $white);
    
    // The string with character sets
    for($i=0; $i<256; $i++){ 
         $text.= chr($i); 
    } 
    
    // Replace path by your own font path
    $font = 'arial.ttf';
    
    // Add some shadow to the text
    imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
    
    // Add the text
    imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
    
    // Using imagepng() results in clearer text compared with imagejpeg()
    imagepng($im);
    imagedestroy($im);
    

    【讨论】:

    • 这是一个不错的功能,但我对从字体文件(如 arial.ttf)打印内容(所有字符)更感兴趣。在某些情况下,您的回答肯定也会有用。
    • 在我的编辑中,我包含了包含所有字符的测试字符串。
    • 如果您想使用 jquery 更改字体,则必须使用 ajax 生成新图像,否则您必须预先渲染所有图像。
    【解决方案2】:

    我有类似的情况,我通过解析 .svg 文件解决了它。因此,如果您没有 SVG 中的文件,您可以将 ttf 转换为 SVG,然后对其进行解析以获取可用字符的 unicode。

    【讨论】:

      【解决方案3】:

      字体可以映射范围广泛的 Unicode 字符,使用从 0 到 0x10FFFF 的代码。因此,如果您真的想以任何随机字体查看 everything ,那么按照其他答案中的建议在循环中进行操作确实会出现问题。即使对于 Arial 的“简单”示例,最低映射字符是 U+0020,最高映射字符是 U+FB02。但是,并非该范围内的所有内容都已映射,因此如果您在循环中执行此操作,您最终会得到很多空的。更不用说它可能会很慢。

      要有效地做你想做的事,你需要一些东西来破解打开字体文件,检查 cmap 表,并获得一个映射字符列表(不是范围)。我不确定您的设置是什么,但您可能可以使用 FreeType 之类的东西在服务器端执行此操作。

      【讨论】:

      • 有价值的信息。谢谢!我只是想获得像 Windows 7“字符映射”这样的东西,它显示字体附带的所有可能的字符。
      • 是的。这样做的唯一方法是查看字体的 cmap 表(这正是 Character Map 所做的)。
      【解决方案4】:

      您可以将 chr 函数与 for 循环一起使用。您将拥有一些不存在的角色,但它又快又容易。如果您愿意,您可以更具体地了解您的开始和结束 ascii 值。

      for($x=1;$x<=255;$x++) {
          echo chr($x) . "&nbsp;"; 
      }
      

      那么你可以只使用jquery来动态改变字体。

      【讨论】:

      • 谢谢!我认为这回答了这个问题,但是,我也想跳过丢失的字符。这些字符有范围吗?我怎么知道第一个和最后一个可用字符的数量是多少?
      • 不同的字体有不同的可用字符。我不知道你会如何跳过空白的。我会玩弄它,看看我能不能解决问题。
      • 您是否主要寻找 0-9、a-z 和 A-Z?这些应该适用于所有字体,我们可以将其缩小到这些范围。
      • 无法保证 0-9、a-z 和 A-Z 将采用任何随机字体,尤其是 @font-face 字体,它可能已被子集化以减小大小。唯一可以确定的方法是检查字体的具体实例。
      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      相关资源
      最近更新 更多