PHP函數Imagettftext(),用于寫入帶有表情符號的文本 [英] PHP function imagettftext() to write text with smileys

查看:0
本文介紹了PHP函數Imagettftext(),用于寫入帶有表情符號的文本的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在使用Imagettftext函數在圖像上寫入文本,但我的文本包含表情符號,它將表情符號替換為方框

以下是mycode:

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

文本示例:

test testt?? Hello ???? Those ??  Mega x ????  Graphic ??

我已嘗試將字體更改為"Arial Unicode",但未解決問題。

如何解決此問題?

提前謝謝。

推薦答案

首先,我們需要了解emoji是如何實現的:

Apple PNG圖片(SBIX表)

Apple使用TrueType/OpenType規范的一個專有的、未發布的擴展來實現它,以將PNG圖像添加到字體中。然后,這些PNG圖像顯示在連續文本中。谷歌也實現了類似的東西,但它與蘋果的解決方案不兼容。

Mozilla和Adobe的SVG(SVG表)。

這兩家網絡巨頭為了最雄心勃勃的格式而走到了一起:OpenType中的SVG。我們不是將Unicode字符映射到字形,而是將其映射到SVG圖像。這為我們帶來了SVG的所有可愛的額外功能,包括漸變、嵌入的位圖圖像甚至動畫。從版本26開始,Firefox就已經支持它了!

Microsoft COLR/CPAL

默認情況下,新的Segoe UI Emoji字體的行為與常規TrueType/OpenType字體類似。它有Unicode編碼的、未上色的"基本字形"。但字體中還有兩個附加表:COLR表將作為層的附加字形鏈接到基本字形,并定義這些層的順序。并且CPAL(調色板)表為各個層存儲一個或多個調色板。(不同的調色板對于在深色和淺色背景上顯示字體非常有用。)因此,當支持這一新的顏色功能時,基本字形將被有色層替換。

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

Google提出了一個使用PNG圖像作為字形的實現。字形只是簡單地被好的舊圖像所取代。這對較小的圖標很有效,顯然帶來了位圖圖像的所有創作自由,但伸縮性不是很好。放大一個足夠大的字形,你會遇到模糊的像素。用css更改字形的顏色即使不是不可能,也是很難的。有趣的是,他們指定在他們的實現中不應該有GLYF表--保存未上色的"正常"字形的表--因此,當這種格式不受支持時,看起來沒有退路。它已經在Android和Linux上使用的FreeType中實現,但如果提議使用OpenType,也會將其帶到Windows和Apple計算機上。


來源:12

最后一種方法是我們感興趣的。這是因為imagefttext是由PHP GD擴展提供的函數。而GD內部使用的是FreeType庫來繪制文本。

從2.5版開始,在FreeType中支持表情符號。嘗試執行php -i命令以查看您有什么版本的FreeType。這是我的:

FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.5.2

但是,在嘗試了我發現的一些示例字體here后,PHP一直拋出警告:

Warning: imagefttext(): Could not set character size

恐怕GD library不支持FT_LOAD_COLOR標志。此標志需要有彩色表情符號。請參閱自由類型更改日志:

2013-05-23  Behdad Esfahbod  

    Add support for color embedded bitmaps (eg. color emoji).

    A new load flag, FT_LOAD_COLOR, makes FreeType load color
    embedded-bitmaps, following this draft specification

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

回答您的問題:您不能使用imagefttext獲得彩色笑臉。對不起,??。

編輯:

您不能同時在GD中繪制黑白表情符號。這是因為GD僅支持1-3個多字節UTF-8字符。表情符號字符范圍屬于4字節UTF-8字符。

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

帶有多字節UTF-8表示的表情符號表:http://apps.timwhitlock.info/emoji/tables/unicode

這篇關于PHP函數Imagettftext(),用于寫入帶有表情符號的文本的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!

查看全文
登錄 關閉
掃碼關注1秒登錄
發送“驗證碼”獲取 | 15天全站免登陸
全免费A级毛片免费看无码播放