PHP HTML图像输出

Posted

技术标签:

【中文标题】PHP HTML图像输出【英文标题】:PHP HTML image output 【发布时间】:2011-04-11 08:08:21 【问题描述】:

php manualbase64_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 中无效。我怎样才能使它跨浏览器?

【问题讨论】:

不,火狐。嗯,它在 IE 中工作...... 您是否真的需要使用数据:URI?因为如果你不这样做,最好不要使用它们。他们有很多缺点。例如,IE (相关) ***.com/questions/3385982/… 【参考方案1】:

好吧,抱歉,我想得太快了:)

imagepng()会将原始数据流直接输出到浏览器,所以必须使用ob_start()等输出缓冲句柄来获取。

你在这里:

ob_start();
imagepng($yourGdImageHandle);
$output = ob_get_contents();
ob_end_clean();

也就是说 - 你需要为你使用 $output 变量 base64_encode() 函数。

【讨论】:

@Mark 不,他是对的。如果它在 IE 中工作,那么因为 img src 部分被忽略。原始图像将输出到浏览器,base64_encode 永远不会发生 为什么要投反对票?我确实做到了我所说的 - 请阅读我编辑的评论。 请用ob_start()解释。你是怎么用的? 我很高兴你很高兴;]【参考方案2】:

因为imagepng 将布尔或图像流直接输出到输出。 因此,为了获取图像数据,您应该使用如下输出缓冲区:

ob_start();
imagepng($im);
$image = ob_get_contents();
ob_end_clean();
echo '<img src="data:image/png;base64,'.base64_encode($image).'" />';

【讨论】:

【参考方案3】:

很可能是因为data: URI 方案非常有限且很好用,除非绝对没有办法绕过它。

例如,在 Internet Explorer 中,这在 IE 8 之前根本不起作用;在那里,有一个global 32 kilobyte limitation 用于数据:URI。

【讨论】:

所以你的意思是换一种方式? @Mark 你首先需要什么数据:URIs? 验证码实验。见***.com/questions/3692969/captcha-encryption 我需要在不保存的情况下显示给用户 @Mark 为什么?需要强调的是,您计划做的事情在 Internet Explorer 7 中根本行不通。您真的能忍受吗?【参考方案4】:

您必须先将图像保存为 PNG,然后从中读取以获取其内容作为值。

http://www.php.net/manual/en/function.imagepng.php

imagepng() 不返回 PNG 文件。它直接输出到浏览器,然后返回一个表示成功或失败的布尔值。

(来自 php.net:) 将图像发送到浏览器时,PHP 在内部使用临时文件,因此调用 imagepng() 两次将一无所获。

【讨论】:

可以在 ob_start() 和 ob_get_contents() 之间加上 imagepng(); ob_end_clean();获取图像,但它仍然使用临时文件。

以上是关于PHP HTML图像输出的主要内容,如果未能解决你的问题,请参考以下文章

php 对Wordpress中的插入图像+标题进行了大修,以产生html5输出

输出图像

PHP 输出图像 imagegif imagejpeg 与 imagepng 函数

将 php 脚本的图像输出保存为文件

PHP输出图像问题

PHP使用GD2库画图,图像无法输出解决方法