【问题标题】:Php webservice that takes JSON via POST and spits back an image通过 POST 获取 JSON 并返回图像的 PHP Web 服务
【发布时间】:2011-04-25 19:05:06
【问题描述】:

(序言:这似乎是一件很典型的事情,我很惊讶我没有立即找到有关它的示例和教程。 所以我认为有一个 StackOverflow 问题会很有价值。 指向相关示例和教程的指针肯定会是受欢迎的答案。)

为了具体化,目标是通过 POST 请求接受 JSON 格式数据的 Web 服务。 数据只是一个单位整数数组,例如[3, 2, 1]。

服务器上有名为 0.png、1.png、2.png 等的图像。 Web 服务获取与 JSON 数组中指定的图像相对应的图像,并使用标准的 ImageMagick 命令行工具将它们组合成蒙太奇。 例如,

montage 3.png 2.png 1.png 321.png

创建一个新的单个图像 321.png,由 3.png、2.png 和 1.png 连续组成。

接受的答案将采用实现上述内容的完整 PHP 代码的形式。 (如果没有人超过我,我会写它。)

【问题讨论】:

  • 这是一个问题还是一个职位描述?
  • 为什么有人要为你写完整的代码? stackoverflow 是为了帮助有问题的人,所以请自己尝试一下,如果遇到问题,请向我们展示您的代码,也许有人可以帮助您解决它。
  • 这是一个简单的人工问题(但也可能有点用处),我认为它会是一个很好的教程。我确实也在写答案。这是 StackOverflow 的创始人从一开始就鼓励的事情。
  • “如果没有人比我写,我会写它”---好吧,你可以开始写你自己的实现了。
  • PS:如果没有投稿,无需评论。假设有人确实出现并慷慨地为我解决了我的问题。会因为某种原因打扰你吗?假设在此处发布了答案,我说过我会自己做,那么您肯定必须同意这将是一项宝贵的贡献。我基本上使用 StackOverflow 作为我自己的小型技术博客。如果我在滥用 StackOverflow,请直截了当。

标签: php web-services image json image-processing


【解决方案1】:

感谢oezi 提供所有作品。 这是完整的 PHP 程序:

<?php
$nums = json_decode($_REQUEST['nums']);

# Lambda functions are a little less ridiculous in php 5.3 but this is the best
# way I know how to do this in php 5.2:
function f($x) { return "$x.png"; }
$cmd = "montage " . implode(" ", array_map("f", $nums)) . " tmp.png";

exec($cmd);

header('Content-type: image/png');
readfile('tmp.png');
?>

试一试:

http://yootles.com/nmontage/go.php?nums=[2,4,6]

你应该得到这个:


(来源:yootles.com)

(当然是 GET 而不是 POST,但 php 程序也接受。)

【讨论】:

  • +1 很好地使用了array_map - 我也想过类似的事情,但认为对于这么小的事情来说这将是太多的“开销”。它不是,就像你的代码证明的那样。
【解决方案2】:

一些提示,我不会为你写完整的代码:

  • 要让你的数组回到 php 端,有json_decode。是这样的:

    $images = json_decode($_POST['whatever']);
  • 要获得蒙太奇的命令,请执行以下操作(注意:您应该验证通过帖子获得的所有输入,我将忽略此并专注于“复杂”部分):

    $cmd = "蒙太奇";
    foreach($images as $image){
      $cmd .= " ".$image.".png";
    }
    $cmd .= "temp.png";
  • 现在您可以使用exec 或他的friends 之一执行您的命令:

    执行($cmd);
  • 至少,设置一个 png-header 并使用 readfile 或类似的东西来获得“tmp.png”

【讨论】:

  • 我遇到了如何在 php web 服务中获取 json 数据的问题。我使用 json_decode($_POST[...]) 但它在调用未定义函数时给出错误
  • @SumedhTambat:请看一下文档:使用 json_decode 的要求是 PHP 5 >= 5.2.0 和 PECL json >= 1.2.0 - 听起来至少其中一个没有'不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多