PHP 函数 imagettftext() 用笑脸写文本

Bhu*_*hah 5 php imagettftext emoji

我正在使用 imagettftext 函数在图像上写入文本,但我的文本包含笑脸,它将笑脸替换为方框

这是我的代码:

$black = imagecolorallocate ( $main_img, 0x00, 0x00, 0x00 );
$font_path = "Arial.ttf";
imagettftext ( $main_img, 14, 0, 73, 685, $black, $font_path, $text );
Run Code Online (Sandbox Code Playgroud)

文本示例:

test testt Hello  Those   Mega x ??  Graphic 
Run Code Online (Sandbox Code Playgroud)

我曾尝试更改“Arial Unicode”字体,但未解决问题。

我该如何解决这个问题?

提前致谢。

sti*_*til 5

首先,我们需要了解表情符号是如何实现的:

Apple 的 PNG 图像(SBIX 表)

Apple 使用 TrueType/OpenType 规范的专有的、未发布的扩展来实现它,以将 PNG 图像添加到字体中。这些 PNG 图像然后显示在运行文本中。谷歌也实现了类似的东西,但它与苹果的解决方案不兼容。

Mozilla 和 Adob​​e 的 SVG(SVG 表)。

这两个网络巨头为了最雄心勃勃的格式聚在一起:OpenType 中的 SVG。我们不是将 Unicode 字符映射到字形,而是将其映射到 SVG 图像。这为我们带来了 SVG 的所有可爱的附加功能,包括渐变、嵌入的位图图像甚至动画。自 26 版以来,Firefox 已支持它!

微软 COLR/CPAL

默认情况下,新的 Segoe UI 表情符号字体的行为类似于常规 TrueType/OpenType 字体。它具有 Unicode 编码的、未着色的“基本字形”。但是字体中有两个附加表:COLR 表将附加字形作为层链接到基本字形,并定义这些层的顺序。CPAL(“调色板”)表为各个层存储一个或多个调色板。(不同的调色板对于在深色和浅色背景上显示字体很有用。)因此,当支持此新颜色功能时,基本字形将替换为彩色图层。

Google 的 PNG 图片(CBDT/CBLC 表)。

Google 提出了一种使用 PNG 图像作为字形的实现。字形简单地替换为好的旧图像。这适用于较小的图标,显然带来了位图图像的所有创作自由,但不能很好地缩放。把一个足够大的字形炸开,你会遇到模糊的像素。使用 CSS 更改字形的颜色也很困难,如果不是不可能的话。有趣的是,他们指定在他们的实现中不应该有 GLYF 表——保存未着色的“正常”字形的表——所以当不支持这种格式时,看起来没有后备。它已经在 Android 和 Linux 上使用的FreeType 中实现,但是 OpenType 的提议也将把它带到 Windows 和 Apple 机器上。


资料来源:12

最后一种方法是我们感兴趣的。这是因为imagefttextPHP GD 扩展提供的功能。GD 内部使用 FreeType 库来绘制文本。

FreeType 从 2.5 版开始支持表情符号。尝试执行php -i命令以查看您拥有的 FreeType 版本。这是我的:

FreeType 支持 => 已启用
FreeType 链接 => 与 freetype
FreeType 版本 => 2.5.2

但是,在尝试使用我在这里找到的一些示例字体后,PHP 不断发出警告:

Warning: imagefttext(): Could not set character size
Run Code Online (Sandbox Code Playgroud)

恐怕GD 库不支持FT_LOAD_COLOR标志。此标志需要具有彩色表情符号。请参阅 FreeType 更改日志:

2013-05-23 Behdad Esfahbod  

    添加对彩色嵌入位图的支持(例如彩色表情符号)。

    新的加载标志 FT_LOAD_COLOR 使 FreeType 加载颜色
    嵌入位图,遵循本规范草案

      https://color-emoji.googlecode.com/git/specification/v1.html

回答您的问题:您不能使用imagefttext. 抱歉 。

编辑:

您也不能在 GD 中绘制黑白表情符号。这是因为 GD 仅支持 1-3 个多字节 UTF-8 字符。Emojis 字符范围属于 4 字节 UTF-8 字符。

来源:https : //github.com/libgd/libgd/blob/master/src/gdft.c#L341

具有多字节 UTF-8 表示的表情符号表:http ://apps.timwhitlock.info/emoji/tables/unicode


Tom*_*icz 1

尝试使用具有已知表情符号 unicode 字符的字体。喜欢符号