PHP HTML图像输出
Posted
技术标签:
【中文标题】PHP HTML图像输出【英文标题】:PHP HTML image output 【发布时间】:2011-04-11 08:08:21 【问题描述】:在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 中无效。我怎样才能使它跨浏览器?
【问题讨论】:
不,火狐。嗯,它在 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输出