我正在尝试改变我的imagefttext()结果的编码。
我的想法是在一个指定的图像上打印一些"阿拉伯"语言的文本,但结果显示在奇怪的形式。
我使用这个代码,但它是正确的工作只是英文字符串:
mb_internal_encoding('UTF-8');
$im =imagecreatefromjpeg('x.jpg');
$textcolor=imagecolorallocate($im, 0, 0, 255);
imagefttext($im, 18, 0, 10, 20,$textcolor,"Fonts/tahoma.ttf","مسعود أوزبل");
imagejpeg($im,"mozil.jpg",100);
imagedestroy($im);
由于
阿拉伯字符不能被视为数组。而且imagefttext()
不支持RTL语言,如开箱即用的阿拉伯语。你需要做的是在不改变其形状(字形/符号)的情况下反转每个字符。@Lars的回答不起作用,因为阿拉伯语中的字符可能会根据其在单词中的位置而变化。在向image
在imagettftext手册的注释中,有一个RTL语言的例子。试试这个
$wordsArray = explode(" ", $text);
$rtlCompleteText='';
for ($i = sizeOf($wordsArray); $i > -1; $i = $i-1) {
//$lettersArray = explode("|", str_replace(";|", ";", $wordsArray[$i]));
$lettersArray = explode(";", $wordsArray[$i]);
$rtlWord='';
for ($k = sizeOf($lettersArray); $k > -1; $k = $k-1) {
if (strlen($lettersArray[$k]) > 1) { // make sure its full unicode letter
$rtlWord = $rtlWord."".$lettersArray[$k].";";
}
}
$rtlCompleteText = $rtlCompleteText." ".$rtlWord;
}
return $rtlCompleteText;
}