发送/显示base64编码的图像

我需要将base64编码的字符串发送到客户端。 因此,我打开并读取服务器上的图像文件,对其进行编码并将该数据与image/jpeg内容类型一起发送到浏览器。 php中的示例:

 $image = $imagedir . 'example.jpg'; $image_file = fopen($image, 'r'); $image_data = fread($image_file, filesize($image)); header("Content-type: image/jpeg"); echo 'data:image/jpeg;base64,' . base64_encode($image_data); 

客户 ,我打电话:

 var img = new Image(); img.src = "http://www.myserver.com/generate.php"; img.onerror = function(){alert('error');} $(img).appendTo(document.body); 

由于某种原因,这不起作用。 onerror总是火上浇油。 例如,观察FireBug Network task ,告诉我我收到了正确的标头信息和正确的传输字节值。

如果我将该数据作为Content-type: text/plain它,则base64字符串将显示在浏览器中(如果我直接调用脚本)。 将该输出复制并粘贴到元素的src中会按预期显示该图像。

我在这做错了什么?

谢谢Pekka指出我的错误。 在这种方法中,您不需要(您不能!)将二进制图像数据编码为base64字符串。 没有base64编码,它只是工作。

在这种情况下,没有理由首先对图像数据进行base64编码。 您想要发出的是普通的旧图像数据。

只需按原样传递JPEG图像即可。

这对我来说唯一有意义的方法是,如果你通过AJAX调用获取了generate.php的输出,并将结果直接放入src属性中。 这应该工作(虽然不是在IE <8,但我相信你知道)。 但是如果你可以直接调用generate.php作为图像的来源,我认为不需要这样做。

如果将content-type设置为image / jpeg,则应该只提供jpeg数据,而不使用base64废话。 但是你把结果视为html。

你正在有效地建立一个数据uri,这没关系,但正如你所指出的那样,只是作为一个uri。 所以保留内容类型(text / html),和

 echo ''; 

你很高兴。

我相信只使用php就可以非常有效地完成…你可以使用下面的函数来渲染base64编码数据中的图像

  function binaryImages($imgSrc,$width = null,$height = null){ $img_src = $imgSrc; $imgbinary = fread(fopen($img_src, "r"), filesize($img_src)); $img_str = base64_encode($imgbinary); if(isset($height) && isset($width)) { echo ''; } else { echo ''; } } 

如何使用这个function

  binaryImages("../images/end.jpg",100,100); 

运行函数binaryImages ..第一个参数是图像路径,第二个是宽度,然后是高度…高度和宽度是可选的

我推荐它: base64_encode用MIME base64编码数据

 echo '';