Intereting Posts
Форма HTML с почтой Как сделать «uniqid» только номера? Использование Twitter OAuth для автоматического обновления статуса isset () и empty () – что использовать используйте некоторое время mysql_fetch_array и UPDATE во время цикла Лучшая практика вставки NULL в MySQL с помощью PHP Как – предупредить, в форме jquery ajax, после успешной подачи формы? Переменная PHP, определенная в «родительском» файле, не распознанная в «обязательном» файле Как наложить длинные строки? Инструменты программирования NLP с использованием PHP? Mysql получает последний идентификатор конкретной таблицы Каковы аргументы в FAVOR PHP закрытия тегов для файлов только PHP? Максимальное время выполнения 60 секунд превысило ошибку Предупреждение: stream_socket_enable_crypto (): этот поток не поддерживает SSL / crypto в C: \ xampp \ htdocs \ 12work \ class.smtp.php в строке 197 PDF, созданный с помощью FPDF, не может быть открыт Adobe Reader

Отображение справа налево подключенных языков (таких как персидский и арабский) в GD – Возможная ошибка PHP

Я хочу создать изображение с текстом на нем с помощью библиотеки php gd.

все хорошо, но когда я пытаюсь написать слово из права на левый связанный язык (например, персидский) с использованием imagefttext() , мой текст выполняет рендеринг слева направо (обратный), и символы больше не связаны.

пример связанных символов: пример несвязанных символов: م ا ه

Вот мой код:

  header('Content-Type: image/jpeg'); $thumb_path = "..."; $font_path = "..." $img = imagecreatefromjpeg($thumb_path); $color = "..."; // __month is a Persian word : ( م ا ه --> ماه ) $text = $months." ".__month; imagefttext($img,29, 10, 230, 135, $color, $font_path, $text); // <-- imagejpeg($img); 

Полученное изображение:

месяц

Я знаю, что моя проблема не в кодировании. Потому что я уже пробовал это:

 $text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8"); 

И результат тот же.

есть доступная библиотека, которая может решить эту проблему. и я знаю, что большинство из вас не знакомы с персидскими или арабскими языками, но мой вопрос в том, почему gd не поддерживает право на левые связанные языки изначально?

может ли это быть ошибкой в ​​gd-библиотеке?

Кажется, что ничего не помогает (установка правильной локали), встроенная поддержка PHP багги, вероятно, поэтому был создан сторонний пакет:

Использовать php-gd-farsi

Работает как шарм:

введите описание изображения здесь

Просто скопируйте библиотеку в свой каталог PHP (не обязательно быть администратором). Использование прост:

 // init: include('php-gd-farsi-master/FarsiGD.php'); $gd = new FarsiGD(); .... // then convert your text: $tx = $gd->persianText($str, 'fa', 'normal'); в // init: include('php-gd-farsi-master/FarsiGD.php'); $gd = new FarsiGD(); .... // then convert your text: $tx = $gd->persianText($str, 'fa', 'normal'); 

Вам даже не нужно устанавливать правильную локаль! 🙂

Код всего примера:

 <?php include('php-gd-farsi-master/FarsiGD.php'); $gd = new FarsiGD(); // Create a 300x100 image $im = imagecreatetruecolor(300, 100); $red = imagecolorallocate($im, 0xFF, 0x00, 0x00); $black = imagecolorallocate($im, 0x00, 0x00, 0x00); // Make the background red imagefilledrectangle($im, 0, 0, 299, 99, $red); // Path to our ttf font file //$font_file = './Vera.ttf'; $font_file = './cour.ttf'; // Draw the text 'PHP Manual' using font size 13 $text = imagecreatetruecolor(200, 60); imagefilledrectangle($text, 0, 0, 200, 60, $red); $str = '**ماه**'; $tx = $gd->persianText($str, 'fa', 'normal'); imagefttext($text, 24, 10, 10, 50, $black, $font_file,$tx ); $im = $text; // Output image to the browser header('Content-Type: image/png'); imagepng($im); imagedestroy($im); ?> в <?php include('php-gd-farsi-master/FarsiGD.php'); $gd = new FarsiGD(); // Create a 300x100 image $im = imagecreatetruecolor(300, 100); $red = imagecolorallocate($im, 0xFF, 0x00, 0x00); $black = imagecolorallocate($im, 0x00, 0x00, 0x00); // Make the background red imagefilledrectangle($im, 0, 0, 299, 99, $red); // Path to our ttf font file //$font_file = './Vera.ttf'; $font_file = './cour.ttf'; // Draw the text 'PHP Manual' using font size 13 $text = imagecreatetruecolor(200, 60); imagefilledrectangle($text, 0, 0, 200, 60, $red); $str = '**ماه**'; $tx = $gd->persianText($str, 'fa', 'normal'); imagefttext($text, 24, 10, 10, 50, $black, $font_file,$tx ); $im = $text; // Output image to the browser header('Content-Type: image/png'); imagepng($im); imagedestroy($im); ?> 

Правильно ли вы настроены локаль?

Глядя на таблицу локалей , персидский должен быть, вероятно, Farsi – fa_IR.UTF-8 из пакета fa_utf8 . Не забудьте проверить, правильно ли он установлен:

 $rv = setlocale(LC_ALL, "fa_IR.UTF-8"); var_dump($rv); 

Изменить: попробовал, и это тоже не помогает.