Как я могу написать не английские символы, такие как арабские или персидские символы в изображение?

Как написать арабские или персидские символы на изображении с помощью библиотеки PHP GD?

то есть "احسان"

4 ответа

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

Вы можете найти источник здесь. и вы также можете установить его с помощью composer, запустив:

composer require quince/persian-gd
  • Нет проблем с персидским характером
  • Это настраиваемый
  • Строка не будет переполнена из холста изображения

Пожалуйста, проверьте его и отправьте отчеты об ошибках, предложения и...

Спасибо

Используйте эту функцию для передачи текста в imagettftext

<?php
function revUni($text) {

    $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;
}
?>

Простое изменение арабских символов, таких как массив, просто не сработает. Вам необходимо учесть арабские глифы и заменить каждый точным символом Юникода. см. здесь аналогичный вопрос и решение: ошибка при записи арабского в изображение

Попробуйте использовать imagettftext.

<?php
// http://localhost/test.php?text=احسان

// test.php file

$font = 'C:/Windows/Fonts/Arial.ttf';
$text = $_GET['text'];

// [switch to right to left] 
// try comparing of using this block and not using this block
$rtl = array();
for($i=0; $i<strlen($text); $i+=2) {
    $rtl[] = substr($text, $i, 2);
}
$rtl = array_reverse($rtl);
$rtl = implode($rtl);
$text = $rtl;
// [/switch to right to left]

$im = imagecreatetruecolor(65, 35);
$black = imagecolorallocate($im, 0, 0, 0);  
$white = imagecolorallocate($im, 255, 255, 255);
imagefilledrectangle($im, 0, 0, 500, 100, $white);  
imagettftext($im, 12, 0, 10, 20, $black, $font, $text);  
header('Content-type: image/png');  

imagepng($im);  
imagedestroy($im); 
Другие вопросы по тегам