Вывод изображения HTML PHP
В PHP manual
для base64_encode()
Я видел следующий script для вывода изображения.
<?php
$imgfile = "test.gif";
$handle = fopen($filename, "r");
$imgbinary = fread(fopen($imgfile, "r"), filesize($imgfile));
echo '<img src="data:image/gif;base64,' . base64_encode($imgbinary) . '" />';
?>
Но как вы можете выводить изображение, динамически созданное с помощью GD
?
Я пробовал это:
$im = imagecreatetruecolor(400, 400);
imagefilledrectangle($im, 0, 0, 200, 200, 0xFF0000);
imagefilledrectangle($im, 200, 0, 400, 200, 0x0000FF);
imagefilledrectangle($im, 0, 200, 200, 400, 0xFFFF00);
imagefilledrectangle($im, 200, 200, 400, 400, 0x00FF00);
echo '<img src="data:image/png;base64,'.base64_encode(imagepng($im)).'" />';
Почему это не работает?
Кажется, он работает в IE, но не Firefox. Как я могу сделать его кросс-браузер?
Ответы
Ответ 1
Хорошо, извините, я слишком быстро думал:)
imagepng()
будет выводить поток необработанных данных непосредственно в браузер, поэтому вы должны использовать ob_start()
и другие дескрипторы буферизации вывода для его получения.
Здесь вы находитесь:
ob_start();
imagepng($yourGdImageHandle);
$output = ob_get_contents();
ob_end_clean();
То есть вам нужно использовать переменную $output
для вас base64_encode()
.
Ответ 2
Потому что imagepng выводит bool или поток изображения непосредственно на вывод.
Итак, чтобы получить данные изображения, вы должны использовать выходные буферы следующим образом:
ob_start();
imagepng($im);
$image = ob_get_contents();
ob_end_clean();
echo '<img src="data:image/png;base64,'.base64_encode($image).'" />';
Ответ 3
Скорее всего, потому что схема URI data:
чрезвычайно ограничена и полезна для использования, если нет абсолютно никакого способа обойти ее.
В Internet Explorer, например, это не работает вообще до IE 8; и там есть глобальное ограничение в 32 килобайта для данных: URI.
Ответ 4
Сначала вы должны сохранить свое изображение как PNG, а затем прочитать его, чтобы получить его содержимое как значение.
http://www.php.net/manual/en/function.imagepng.php
imagepng() не возвращает PNG файл. Он выводит его непосредственно в браузер, а затем возвращает логическое значение успеха или отказа.
(от php.net:)
PHP внутренне работает с временным файлом при отправке изображения в браузер, так что вы ничего не выиграете, дважды позвонив imagepng().