PHP 5: как записать двоичные данные utf-8 - изображение - для вывода? - PullRequest
1 голос
/ 25 августа 2009

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

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

есть предложения?

Ответы [ 2 ]

0 голосов
/ 25 августа 2009

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

<?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 использовать «лучший» / более полный шрифт, чем тот, который используется 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 в такой ситуации может дать вам лучшие результаты; -)

0 голосов
/ 25 августа 2009

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

...