Ajax并返回由PHP GD创建的图像

时间:2012-08-27 14:56:03

标签: php ajax jquery php-gd

我有一个用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);
  }
});

3 个答案:

答案 0 :(得分: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);
    })....

答案 1 :(得分: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);
}

答案 2 :(得分:0)

您应该在执行echo $img_data;

之前修改标题
header("Content-Type: image/jpeg");
header("Content-Length: " .sizeof($img_data));