如何使用 PHP 的 imgttftext() 函数将 Unicode 文字正确地写入图像

3

我正在尝试使用PHP的imgttftext()函数在图像上写入一些乌尔都语文本。如果不使用以下代码转换文本,则无法显示字符:

function convert($text){
    $out="";
    mb_language('uni');
    mb_internal_encoding('UTF-8');
    $text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
    $text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
    for($i = 0; $i < strlen($text); $i++) {
        $letter = $text[$i];
        $num = ord($letter);
        if($num>127) {
              $out .= "&#$num;";
        } else {
              $out .=  $letter;
        }
    }
    return $out;
}

现在,例如包含三个字符 ع چ ں 的文本 e.g. عچں 被作为独立和完整的字符打印到图片上,而不是将这些字符剪切并结合成乌尔都语单词 عچں。
我从这个页面 http://en.wikipedia.org/wiki/List_of_Unicode_characters#Arabic 中使用了带有代码 U+0627、U+0628、U+0629等的字符 ا ب ت ث 等。
我在此共享了代码:https://code.google.com/p/urdu-captcha/downloads/list

注意:在提供的代码中,我添加了字符间的空格,去除这些空格对文本在图像上的显示没有影响。

如何使它们连在一起以形成正确的单词?

你能添加更多的代码吗?例如,你使用的是哪种字体?你的图片有多大?当你将文本传递给转换函数时,它使用的是哪种字符集? - herrjeh42
你检查过了吗?你确定你没有问题,因为乌尔都语是rtf格式的吗?在imgttftext手册中有一个例子。 - herrjeh42
我刚刚尝试了你关于rtf的建议。我正在编辑问题以添加更多的代码和信息。 - Raouf Athar
我已经尝试过您代码中的其他TTF字体(顺便说一下,处理UTF-8编码字符串可以更加简单直接),但它们都没有实现字形连接。这似乎是imagettftext()的一个严重缺陷。 - Walter Tross
@RaoufAthar,你是怎么解决的?因为我用JameelNooriNastaleeq.ttf字体无法工作。 - Haseeb
啊,那是很久以前的事了。我想我使用的是下面被接受的答案中提到的AR-PHP。如果我没记错的话,所有字体都不能正常工作。我会尝试找到那些旧代码并让你知道我使用过哪些字体。 - Raouf Athar
1个回答

4

您需要另外一个库来执行阿拉伯语字形连接。请查看AR-PHP


+1,因为从我的测试来看,这似乎是克服imagettftext()缺点的最佳方法。 - Walter Tross
关于Ar-PHP的示例代码,需要注意的是:$text变量被重复使用来保存转换后的文本,这只适用于imagettftext()的输入。为了避免混淆,应该使用不同的变量。 - Walter Tross
Arabic.php对于所有单词都不能正常工作。如果您知道如何修复此问题,请告诉我。 - Ahsan Hussain
$text2 = '巴基斯坦的木尔坦'; $text2 = $Arabic->utf8Glyphs($text2); imagettftext($jpg_image, 100, 0, 500, 950, $white, $font_b, $text2); - Ahsan Hussain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接