【问题标题】:sending an image and return it using json?发送图像并使用json返回它?
【发布时间】:2011-07-05 17:55:36
【问题描述】:

我尝试使用 json 将图像发送到 php 中的 web 服务,但客户端 cnt 读取了图像.. 当我退货的时候!!

<?php

//recieve the image

$media = json_decode($_POST['media']);

header('content-type: image/jpeg');
$image = imagecreatefromjpeg($media);
imagefilter($image,IMG_FILTER_GRAYSCALE);
imagefilter($image,IMG_FILTER_COLORIZE,100,50,0);
imagejpeg($image, '', 90);
imagedestroy($image);

//return image

$response = array(  
         'image' => $image
     );  
     echo json_encode($response);

?>

从代码中,我做错了什么吗?谢谢!!! :))

【问题讨论】:

  • 首先以 JSON 格式发送二进制图像数据毫无意义。但即使您这样做,我们也需要知道您的客户实际如何处理图像以提供任何相关信息
  • 编辑:我正在考虑的解决方案之一,实际上是生成一个新的图像文件,然后将其作为 url 发送回来!

标签: php web-services image json api


【解决方案1】:

JSON MIME 类型是application/json,所以不能发送image/jpeg

我认为发送图像的路径并让您的 JavaScript 向图像发出请求会更容易。

否则,我不确定您将如何在客户端上重新创建它。日期 URI 建议使用 base64 编码,所以如果您坚持这样做,请先调用base64_encode()

【讨论】:

  • 但这需要我在服务器上创建一个图像文件,对吧?
  • @getaway 是的,发送路径需要您制作文件。您始终可以将图像的 src 属性设置为此脚本的输出(删除 JSON 响应内容)。
  • 是的,这很酷@alex,可以给我一个设置src的例子!!!我很混乱!!谢谢我的 +1
  • @getaway 我的意思是你可以(使用 JavaScript)document.getElementById('your-image').src = 'your-image-generator.php';
  • 哦,谢谢,好吧,就 base64_encode 而言,我是否在 php 脚本中的图像上运行它,然后在我的客户端(javascript)上对其进行解码
【解决方案2】:
$media = json_decode($_POST['media']);

您究竟是如何将图像发送到此脚本的? PHP 中的文件上传放在 $_FILES 数组中,而不是 $_POST。除非您的客户端脚本正在做一些时髦的事情,否则从 client->php 发送的文件永远不会出现在 _POST 中。

imagejpeg($image, '', 90);

此行将立即将图像输出为 .jpg 内容,而不会将其保存到文件中。然后你做

 echo json_encode($response);

这将是 JSON 数据的一个小 sn-p。但是,您已经使用imagejpeg() 调用输出了图像的二进制数据,所以现在您将一些垃圾附加到您发送的文件中。

另外,$image 不是图像的二进制数据。它是进入 GD 系统的句柄,它是一种资源。对其进行 json_encode 不会给你一个 json'd .jpg,它会给你一个 json'd PHP 对象。

【讨论】:

    【解决方案3】:

    也许在构建和发送 json 响应之后而不是之前使用 imagedestroy()

    【讨论】:

      【解决方案4】:

      我使用这种方法从我的服务器获取图像:Get images from PHP server to Android

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 2015-03-30
        • 1970-01-01
        相关资源
        最近更新 更多