Вывод изображения PHP HTML
на PHP manual
на base64_encode()
Я видел следующий скрипт для вывода изображения.
<?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. Как я могу сделать это кросс-браузер?
4 ответов
хорошо, извините, я думал слишком быстро:)
imagepng()
выведет поток необработанных данных напрямую в браузер, поэтому вы должны использовать ob_start()
и другие ручки буферизации выхода для того чтобы получить его.
вы тут:
ob_start();
imagepng($yourGdImageHandle);
$output = ob_get_contents();
ob_end_clean();
то есть - вам нужно использовать $output
переменной для вас
, потому что imagepng выводит bool или поток изображений непосредственно на выход.
Итак, чтобы получить данные изображения, вы должны использовать выходные буферы следующим образом:
ob_start();
imagepng($im);
$image = ob_get_contents();
ob_end_clean();
echo '<img src="data:image/png;base64,'.base64_encode($image).'" />';
скорее всего потому, что data:
схема URI чрезвычайно ограничена и хороша в использовании, если нет абсолютно никакого способа обойти ее.
в Internet Explorer, например, это не работает вообще до IE 8; и там есть глобальное ограничение в 32 килобайта для данных: URIs.
сначала вы должны сохранить изображение как PNG, а затем прочитать его, чтобы получить его содержимое в качестве значения.
http://www.php.net/manual/en/function.imagepng.php
imagepng () не возвращает PNG-файл. Он выводит его непосредственно в браузере, а затем возвращает логическое значение успеха или неудачи.
(от php.net:) PHP внутренне работает с временным файлом при отправке изображения в браузер, поэтому вы ничего не получите, позвонив imagepng() дважды.