作者danny0838 (道可道非常道)
看板PHP
標題[請益] 指定字型輸出文字圖片
時間Sat Aug 21 16:35:13 2010
我想製作一個動態輸出文字的程式,
php 檔案編碼為 UTF-8,程式碼如下:
header('Content-type: image/png');
$im = imagecreatetruecolor(500, 50);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 499, 49, $white);
$text = '測試內容Test...'; // 要輸出的文字
$font = 'source/font/fcz.ttf'; // 使用的字體
imagettftext($im, 30, 0, 0, 40, $black, $font, $text);
imagepng($im);
imagedestroy($im);
一般的造字檔(.tte),只要餵給它正確的編碼或16進位entity都能正確輸出,
但4位元的字如 unicode ext-b 似乎沒辦法這樣輸出
會變成直接印出像 𠀜 。
如果要轉 ext-b 字元,有什麼方法可以解決?
真相:造字檔輸出測試「XO」(XO是前二字直接貼進去):
http://tinyurl.com/35lxwy8
ext-B「𠀜X」(X是前一個字直接貼進去):
http://tinyurl.com/35dgvzg
還有.. imagettftext 的參數規則是什麼?
第二個參數填 30 可是實際文字寬高佔的像素並不是 30,
而產生的文字並沒有對齊基線或其他東西,像這裡的 0, 40 都是試誤而得,
而且不同字體結果好像又不太一樣...做成一字一圖也常會歪掉,
有明確的規則可以遵循嗎?
另一個小問題是,
使用華康行書體、文鼎正圓體之類的都能正常輸出,微軟正黑體也成功了,
但用新細明體和標楷體,輸出的字卻變得很奇怪。這是什麼原因?
還好目前其他字體還沒遇到類似情形...
真相:華康行書體:
http://tinyurl.com/32fsdpg
新細明體:
http://tinyurl.com/37x27ns
標楷體:
http://tinyurl.com/3yu2cj3
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 119.14.179.157
※ 編輯: danny0838 來自: 119.14.179.157 (08/21 16:39)
1F:推 SKL:參數那邊要看你是 GD1 還是 GD2 08/21 17:38
3F:→ SKL:至於對齊那邊,我是先用 imagettfbbox 然後去減出寬/高 08/21 17:40
4F:→ SKL:字型那邊我不清楚原因,因為我自己試驗都是正常的 08/21 18:06
5F:→ SKL:不過可能要提醒一下使用上授權的問題喔 @.@ 08/21 18:06
6F:推 LPH66:𠀜 的問題可能是 fcz.ttf 中只有做到 U+FFFF 的字型 08/21 19:36
7F:→ danny0838:@SKL: 感謝,imagettfbbox確實有解決對齊的問題 08/21 20:26
8F:→ danny0838:GD1/2是看phpinfo中GD version 1.xx或2.xx嗎? 08/21 20:27
9F:→ danny0838:授權字體是因為在測試,實際會改用免費的XD 08/21 20:28
10F:→ danny0838:@LPH66:該字體有涵蓋ext-B(安裝後可在word用),而且一 08/21 20:29
11F:→ danny0838:般沒字體是會產生空白或方框,不會變成&#x...; 08/21 20:29