Php webservice, который принимает JSON через POST и выкладывает обратно изображение - PullRequest
5 голосов
/ 15 октября 2010

(Преамбула: кажется, что это типичная вещь, которую я хотел бы сделать, поэтому я был удивлен, что не сразу нашел примеры и руководства по этому вопросу. Поэтому я подумал, что было бы полезно иметь вопрос StackOverflow.Указатели на соответствующие примеры и учебные пособия, безусловно, будут приветствоваться.)

Чтобы сделать это конкретным, целью является веб-служба, которая принимает данные в формате JSON через запрос POST.Данные - это просто массив однозначных целых чисел, например, [3, 2, 1].

. На сервере находятся изображения с именами 0.png, 1.png, 2.png и т. Д. Веб-служба принимает изображения, соответствующиек указанным в массиве JSON и объединяет их в монтаж, используя стандартный инструмент командной строки ImageMagick.Например,

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

создает новое отдельное изображение, 321.png, состоящее из 3.png, 2.png и 1.png, все подряд.

ПринятыйОтвет будет в виде полного кода PHP, который реализует вышеизложенное.(Я напишу, если меня никто не побьет.)

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

Спасибо 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]

Вы должны получить это:

246 http://yootles.com/nmontage/246.png

(Это, конечно, GET вместо POST, но программа php принимает и то и другое.)

2 голосов
/ 15 октября 2010

некоторые намеки , я не буду писать полный код для вас:

  • чтобы вернуть массив на php-сторону, есть json_decode . вот так:

    $images = json_decode($_POST['whatever']);
  • , чтобы получить команду для монтажа, сделайте что-то вроде этого (примечание: вы должны проверить всю информацию, полученную вами по почте, я собираюсь пропустить это и сосредоточиться на «сложных» частях):

    $cmd = "montage";
    foreach($images as $image){
      $cmd .= " ".$image.".png";
    }
    $cmd .= " temp.png";
  • теперь вы можете выполнить свою команду, используя exec или одного из его друзей :

    exec($cmd);
  • как минимум, установите png- header и используйте readfile или что-то подобное, чтобы получить "tmp.png"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...