【问题标题】:Ajax and returning image created by PHP GD由 PHP GD 创建的 Ajax 和返回图像
【发布时间】:2012-08-22 02:07:31
【问题描述】:

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

【问题讨论】:

    标签: php ajax jquery php-gd


    【解决方案1】:

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

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

    【讨论】:

    • 我不确定如何实现这个?因为我可以用谷歌搜索,我需要一些“json 编码”来实现这个或类似的东西?
    • Tnx,但仍然不是图像数据,而是“未定义”。但这帮助我在正确的地方搜索。我将解决方案放在下面的答案中。
    • 请注意,您将丢失缓存
    【解决方案2】:

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

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

    【讨论】:

    • 执行此操作时结果相同,没有任何变化。
    【解决方案3】:

    这里是解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多