发送图像并使用json返回它?

时间:2011-02-28 12:29:59

标签: php web-services image json api

我尝试使用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);

?>

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

4 个答案:

答案 0 :(得分:8)

JSON MIME类型为application/json,因此您无法发送image/jpeg

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

否则,我不确定你将如何在客户端重新创建它。建议将日期URI设置为base64编码,因此如果您坚持这样做,请首先致电base64_encode()

答案 1 :(得分:2)

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

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

imagejpeg($image, '', 90);

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

 echo json_encode($response);

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

此外,$image不是图像的二进制数据。它是GD系统的一个手柄,它是一种资源。在它上面做json_encode不会给你一个json'd .jpg,它会给你一个json'd某种PHP对象。

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

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