2015-09-04 58 views
4

我使用imagettftext函數寫上圖片文字寫有表情的文字,但我的文字包含表情,並將其替換表情方盒子PHP函數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 

我與改變字體是「宋體的Unicode」,但它不是解決問題的嘗試。

我該如何解決這個問題?

在此先感謝。

+0

您是否檢查過您嘗試使用的字體是否包含您嘗試打印的unicode範圍的字符? –

+0

是的Unicode字體支持字體,但不知道表情符號 –

+0

是否需要表情符號庫或任何其他顯示? –

回答

1

嘗試使用帶有已知emoji unicode字符的字體。像Symbola

+0

我試過這個,但不工作...取代表情符號? –

+0

你能提供你試圖繪製的字符串嗎? –

+0

我一直在測試Symbola,有些角色工作正常,像☕,但其他人不是真的。 我認爲這只是一個試驗和錯誤,以找到支持您需要的字體 –

1

你可以發佈哪些笑臉是你想使用?如果你能給我們提供代碼,你可以在選擇笑臉後在windows charmap中看到,這將是最好的。 在Arial中,我發現只有這些笑臉:☺☻☼♀♂♠♠♣♦♦♪♫♯ - 他們都沒有出現問題。我使用的例子,從php.net

+0

我從instagram獲取數據,因此需要所有emojis的通用解決方案。你能提供給我的鏈接或例子,你嘗試從php.net?你有沒有試圖在圖像上顯示這些笑臉? –

+0

我試過這個例子:http://php.net/manual/en/function.imagettftext.php,但從我看到我不能使用你發佈的一些符號。我認爲這是一個字體和/或編碼相關的問題。 你的腳本是用utf-8編碼的嗎? PHP的默認編碼設置爲utf-8嗎? – kayo

3

首先,我們需要了解如何表情符號來實現:

蘋果的PNG圖像(SBIX表)

蘋果實現了它採用了專有的,未公開的擴展TrueType/OpenType規範將PNG圖像添加到字體。這些PNG圖像然後顯示在正在運行的文本中。谷歌也實施了類似的事情,但它與蘋果的解決方案不兼容。

Mozilla和Adobe的SVG(SVG表)。

這兩個網絡巨頭爲了最雄心勃勃的格式聚在一起:SVG在OpenType中。我們不是將Unicode字符映射到字形,而是將其映射到SVG圖像。這爲我們帶來了所有可愛的SVG附加功能,包括漸變,嵌入式位圖圖像甚至動畫。自從26版以來,它已經被Firefox支持!

微軟COLR/CPAL

默認情況下,新的Segoe UI字體的表情符號的行爲就像一個普通的TrueType/OpenType字體。它具有Unicode編碼的無色「基本字形」。但字體中還有兩個附加表格:COLR表格將附加字形作爲圖層鏈接到基本字形並定義這些圖層的順序。 CPAL(「調色板」)表格爲單個圖層存儲一個或多個調色板。 (不同的調色板對於在深色和淺色背景上顯示字體非常有用。)所以,當支持這種新的顏色特徵時,基本字形將被替換爲彩色圖層。

Google的PNG圖像(CBDT/CBLC表格)。

Google提出了使用PNG圖像作爲字形的實現。字形只是由好的舊圖像取代。這適用於較小的圖標,顯然帶來了位圖圖像的所有創意自由,但不能很好地擴展。吹掉一個足夠大的字形,你會遇到模糊的像素。用CSS來改變字形的顏色也很難,如果不是不可能的話。有趣的是,他們指定在他們的實現中不應該有GLYF表 - 這個表包含無色的「普通」字形 - 所以看起來沒有這種格式不被支持的回退。它已在FreeType中實現,它在Android和Linux上使用,但針對OpenType的提議也會將其引入Windows和Apple計算機。


來源:12

最後一種方法是我們感興趣的是這是因爲imagefttext是PHP的GD擴展提供的功能。 GD內部使用FreeType庫來繪製文本。

從版本2.5開始,FreeType支持Emojis。嘗試執行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標誌。此標誌需要有彩色表情符號。見FreeType的更新日誌:

 
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

+0

我不想使用彩色的笑臉,但我可以顯示笑臉,而不是空心方形? –

+0

@BhumiShah,我編輯了我的答案。在GD圖書館修復之前,這也是不可能的。 – stil

+0

使用imagick而不是gd函數可以獲得表情符號嗎? –

1

我建議你使用PHP ImageMagick庫。儘管我沒有使用表情符號來嘗試它,但是當我嘗試使用DG呈現文本時,遇到了與其他Unicode字符相同的問題。

順便說一句,遷移到即時消息是個好主意,至少是因爲更好的性能和更少的怪癖。

Here is an example that should work for You