PHP 5: как написать двоичные данные utf-8 – изображение – выводить?

У меня есть сервер Ubuntu и PHP5, а также файлы сценариев PHP, и все выходные данные находятся в UTF-8. Я пытаюсь отправить изображение в выходной поток, но на выходе появляются только искаженные китайские символы:

$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);

какие-либо предложения?

Ваш код отлично работает на моей машине:

 <?php $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); header('Content-type: image/jpeg'); imagejpeg($im); imagedestroy($im); die; ?> 

Вы уверены, что не выводят ничего до или после этого кода? Даже любые пробелы были бы источником неприятностей.

Или, может быть, ваш сценарий что-то делает где-то еще?

Если он все еще не работает, может быть, imagettftext с помощью imagettftext , использовать «лучший» / более полный шрифт, чем те, которые используются для imagestring ?

Используя что-то вроде этого, например:

 $font = '/usr/share/fonts/truetype/msttcorefonts/arial.ttf'; imagettftext($im, 20, 0, 10, 20, $text_color, $font, 'A Simple éléphant String'); 

Кстати, вы пробовали без этой линии:

 header('Content-type: image/jpeg'); imagejpeg($im); imagedestroy($im); 

Если есть ошибка / предупреждение / уведомление, удаление этих строк может помочь вам увидеть их.

И в качестве побочного элемента: использование JPEG для изображений, содержащих какой-либо текст, обычно не дает больших результатов, поскольку JPEG является разрушительным механизмом сжатия. Использование PNG в такой ситуации может привести к лучшим результатам 😉

Попробуйте удалить отметку порядка байтов UTF-8, потому что она добавляется к содержимому вашего изображения JPEG, делая его недействительным.