У меня есть сервер 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, делая его недействительным.