php GDlib是否支持字体回退以呈现所有语言的文本?

bxgwgixi  于 2023-04-19  发布在  PHP
关注(0)|答案(1)|浏览(251)

我想以ASCII和埃塞俄比亚/阿姆哈拉语脚本呈现文本(但最好支持各种语言的字符)。
诺托字体安装在使用sudo apt install fonts-noto-core的Ubuntu系统上
如何在使用GDLib打印埃塞俄比亚文时输出混合语言/支持ASCII的文本?这可能吗?
在系统iself上,例如在gedit中,它可以正确显示,字体回退似乎也可以工作。
另一个选择是将所有的字形合并到一个TTF中?这对GDlib可能吗?
我的测试代码看起来像这样:

<?php

$image = imagecreatetruecolor(200,50);
$font = 'DejaVuSans';

imagettftext($image, 10, 0, 0, 20, imagecolorallocate($image,255,0,0), '/usr/share/fonts/truetype/noto/NotoSans-Bold.ttf', "NotoSans-Bold A € ኤ" );
imagettftext($image, 10, 0, 0, 40, imagecolorallocate($image,255,0,0), '/usr/share/fonts/truetype/noto/NotoSansEthiopic-Bold.ttf', "NotoSans-Ethiopic A € ኤ" );

header('Content-Type: image/png');
echo imagepng($image);

并产生

我在PHP8.1上使用以下gd_info()

array(15) {
  ["GD Version"]=>
  string(5) "2.3.3"
  ["FreeType Support"]=>
  bool(true)
  ["FreeType Linkage"]=>
  string(13) "with freetype"
  ["GIF Read Support"]=>
  bool(true)
  ["GIF Create Support"]=>
  bool(true)
  ["JPEG Support"]=>
  bool(true)
  ["PNG Support"]=>
  bool(true)
  ["WBMP Support"]=>
  bool(true)
  ["XPM Support"]=>
  bool(true)
  ["XBM Support"]=>
  bool(true)
  ["WebP Support"]=>
  bool(true)
  ["BMP Support"]=>
  bool(true)
  ["AVIF Support"]=>
  bool(true)
  ["TGA Read Support"]=>
  bool(true)
  ["JIS-mapped Japanese Font Support"]=>
  bool(false)
}
wa7juj8i

wa7juj8i1#

作为一种变通方法,我自己合并了字体,如by satish所述。

apt install python3-nototools fonttools
cp /usr/lib/python3/dist-packages/nototools/merge_fonts.py ~/merge_fonts.py

使用此字体列表

# file names to be merged
files = [
    "NotoSans-Bold.ttf",
    "NotoSansEthiopic-Bold.ttf",
]

那就执行

PYTHONPATH='.' python3 ~/merge_fonts.py -d /usr/share/fonts/truetype/noto/ -o ~/NotoSansWithEthiopic.ttf

在GDlib中使用此字体可以工作。

相关问题