Как я могу написать не английские символы, такие как арабские или персидские символы в изображение?
Как написать арабские или персидские символы на изображении с помощью библиотеки 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);