作者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