2

我有一个使用 PHP GD 生成图像的 PHP 脚本。生成图像后,将其保存,并在被 Ajax 调用时发送此输出:

imagejpeg($img_data, 'filename.jpg');
echo '<img src="/filename.jpg.jpg">';

之后,图像显示在页面上,一切都很好。但是,我不想每次都创建一个图像。有什么方法可以让我只通过 Ajax$raw_data字符串返回并显示图像吗?我试过这样:

echo $img_data;

但是没有运气,返回的只有几个?

这是我的 jQuery Ajax 代码:

$.ajax({
  type: 'POST',
  data: {
    action: 'update_image',
    //some instructions for creating the image
  },
  url: 'script.php',
  success: function(msg) {
    $('#somediv').append(msg);
  }
});
4

3 回答 3

4

base64 编码图像并返回,然后你可以做一个<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA......." />

在 PHP 方面

$image = base64_encode($imageGDRender);
echo json_encode(array('image'=>$image));

这会将您的 json 返回到您的 jquery

然后在ajax方面

$.ajax({
    ...
    success: function(data) {
        var base64Image = data.image;
        ...now put it in your image
        $('#image').attr('src','data:image...'+base64Image);
    })....
于 2012-08-27T14:57:58.437 回答
1

这是解决方案:

PHP代码:

ob_start();
imagejpeg($im);
$outputBuffer = ob_get_clean();
$base64 = base64_encode($outputBuffer);
echo '<img src="data:image/jpeg;base64,'.$base64.'" />';

在用户端(在 JQuery 中):

success: function(data) {
        $('#somediv').append(data);
}
于 2012-08-27T16:19:23.687 回答
0

您应该在执行之前修改标题echo $img_data;

header("Content-Type: image/jpeg");
header("Content-Length: " .sizeof($img_data));
于 2012-08-27T15:01:44.143 回答