Как я могу изменить кодировку результата imagefttext () в библиотеке php gd? - PullRequest
0 голосов
/ 04 сентября 2011

Я пытаюсь изменить кодировку моего результата imagefttext ().
Моя идея состоит в том, чтобы напечатать некоторый текст на арабском языке на указанное изображение, но результат отобразится в странной форме.

Я использовал этот код, но он работает правильно только с английской строкой:

mb_internal_encoding('UTF-8'); <br> <b>$im</b> =imagecreatefromjpeg('x.jpg');<br> <b>$textcolor</b>=imagecolorallocate($im, 0, 0, 255);<br> imagefttext($im, 18, 0, 10, 20,$textcolor,"Fonts/tahoma.ttf","مسعود أوزبل");<br> imagejpeg($im,"mozil.jpg",100);<br> imagedestroy($im);<br>

Могу ли я найти решение этой проблемы?
Спасибо

Ответы [ 2 ]

0 голосов
/ 10 сентября 2014

Арабские символы не могут рассматриваться как массив . Также imagefttext() не поддерживает языки RTL, такие как арабский язык из коробки . Что вам нужно сделать, это повернуть каждый символ без изменения его формы (глиф / символ). Ответ @Lars не сработает, потому что символ на арабском может меняться в зависимости от его положения в слове. Смотрите здесь для аналогичного ответа и решения: Ошибка при записи арабского на изображение

0 голосов
/ 04 сентября 2011

в комментариях к руководству для 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;
} 
...