在 imagettftext() 函数中使文本字符串从右向左读取

2022-08-31 01:20:44

我想用 imagettftext 从右到左而不是从左到右写一个文本字符串 ();功能

我在手册中读到角度变量控制这一点,它说0角度意味着从左到右,所以我尝试了180,360,但没有发生任何事情

我需要把它放在什么角度才能让它从右到左书写

我正在用支持希伯来语字符的字体.ttf编写希伯来语文本字符串

<?php   
$white = imagecolorallocate($background, 255, 255, 255);
$fontfile = "davidtr.ttf";
$string = "מחלדגכ";
imagettftext($background, 12, 360, 3, 17, $white, $fontfile, $string);

?>

我也用了这个函数 strrev(),

$white = imagecolorallocate($background, 255, 255, 255);
$fontfile = "davidtr.ttf";
$string = strrev("עברית");
//imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
imagettftext($background, 12, 0, 3, 17, $white, $fontfile, $string);

现在文字被搞砸在图像上,一些字母是白框

然后我用了这个函数:

function utf8_strrev($str){
   preg_match_all('/./us', $str, $ar);
   return join('',array_reverse($ar[0]));
}

它帮助了我很多,但现在它也反转了整数。

$string = "מחל 65 דגכ";
echo utf8_strrev($string);
//Now string revered but 65 converted to 56

你能给我一个更好的解决方案,只有希伯来语字符是反向的,而不是整数?


答案 1

你可以像这样改变utf8_strrev():

function utf8_strrev($str){
   preg_match_all('/([^\d]|\d+)/us', $str, $ar);
   return join('',array_reverse($ar[0]));
}

通过这种方式,您可以匹配所有不是数字的内容或所有数字序列。

因此,字符串“one 123 two”将导致字符串“owt 123 eno”。

utf8_strrev() 内$ar数组将类似于 preg_match_all():

[0] => o
[1] => n
[2] => e
[3] => 
[4] => 123
[5] =>
[6] => t
[7] => w
[8] => o

答案 2

这将帮助你:

<?php
$s = iconv("ISO-8859-8", "UTF-8", hebrev(iconv("UTF-8", "ISO-8859-8", $s)));
?>

推荐