我正在尝试使用GD库
在图像中打印unicode字符我有以下代码
$text = "கைவிடப்பட்ட";
$font = "arial.ttf";
$im = imagecreatetruecolor(2500, 500);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 2500, 500, $white);
imagettftext($im, 16, 0, 10, 20, $black, $font, $text);
imagepng($im);
imagedestroy($im);
这里的原文是கைவிடப்பட்ட,但打印如下,你可以看到第一个字母被替换。
编辑:我尝试了5种不同的字体所有结果都相同(在线字体预览正确显示字符)。而当我通过php(从数据库)回显字符串到浏览器时,输出完全相同(கைவிடப்பட்ட),但为什么imagettftext正在切换字符..
答案 0 :(得分:0)
Unicode标准策略是仅编码字符,而不编码字形。 கை
,包含க
上的组合字符。泰米尔语被视为一个复杂的脚本,需要复杂的处理,许多软件组件都无法正确处理它。
最好的方法是找到或创建一个专为泰米尔语编写的php扩展库。
答案 1 :(得分:0)
我不确定GD库和环境,但我想这个问题是由于渲染造成的。 கை=க+ combination的组合,环境不支持显示时对unicode的渲染。所以要么检查任何渲染解决方案或使用非unicode字体或做以下解决方法来解决它在PHP中。
$text = "கைவிடப்பட்ட";
$imgtext = tamilrender($text);
$font = "arial.ttf";
$im = imagecreatetruecolor(2500, 500);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 2500, 500, $white);
imagettftext($im, 16, 0, 10, 20, $black, $font, $imgtext);
imagepng($im);
imagedestroy($im);
function tamilrender($input)
{$input= preg_replace("/([க-ஹ])([ைேெ])/u", "$2$1", $input);
$input= preg_replace("/([க-ஹ])ொ/u", "ெ$1ா", $input);
$input= preg_replace("/([க-ஹ])ோ/u", "ே$1ா", $input);
return $input;}