2012-08-27 111 views
2

我有一个PHP脚本,用PHP GD生成图像。它生成的图像后,将其保存,并将其发送输出时的Ajax调用:由PHP创建的Ajax和返回的图像GD

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

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); 
    }).... 
+0

我不确定如何实现这个?正如我可以谷歌关于这一点,我需要一些“JSON编码”来实现这个或类似的东西? – SomeoneS

+1

我编辑给你一个它如何工作的想法 – romo

+0

Tnx,但仍然代替图像数据,我得到“未定义”。但是这帮助我在正确的地方搜索。我在下面回答了解答。 – SomeoneS

0

你应该做echo $img_data;

header("Content-Type: image/jpeg"); 
header("Content-Length: " .sizeof($img_data)); 
+0

结果是相同的,当我这样做,没有什么变化。 – SomeoneS

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); 
}