2010-10-15 7 views
5

(Preambuła: Wydaje mi się, że to typowa rzecz, którą chcę zrobić, że byłem zaskoczony, że nie od razu znalazłem przykłady i tutoriale na ten temat. byłoby cenne mieć jako pytanie StackOverflow. Wskaźniki do powiązanych przykładów i tutoriali na pewno będzie mile widziane odpowiedzi.)Serwis internetowy Php, który pobiera JSON przez POST i wypluwa obraz

aby to beton, celem jest usługa, która akceptuje dane w formacie JSON za pośrednictwem żądania POST . Dane to po prostu tablica jednocyfrowych liczb całkowitych, np. [3, 2, 1].

Na serwerze znajdują się obrazy o nazwach 0.png, 1.png, 2.png, itp. Usługa internetowa pobiera obrazy odpowiadające tym, które określono w tablicy JSON i komponuje je do montażu za pomocą standardowego polecenia ImageMagick narzędzie liniowe. Przykładowo

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

utworzenie nowego pojedynczego obrazu, 321.png, składający się z 3.png, 2.png i 1.png, w rzędzie.

Przyjęta odpowiedź będzie miała postać pełnego kodu PHP, który implementuje powyższe. (. Będę pisać, jeśli nikt nie bije mnie do niego)

+3

Czy to jest pytanie lub praca opis? – deceze

+3

dlaczego ktoś miałby napisać dla ciebie kompletny kod?stackoverflow jest dla _helping_ somone, który ma problemy, więc spróbuj sam, pokaż nam swój kod, jeśli masz problemy i być może ktoś pomoże ci go rozwiązać. – oezi

+0

Jest to prosty sztuczny problem (ale może również nieco przydatny), który według mnie byłby dobrym samouczkiem. Naprawdę też piszę odpowiedź. Jest to coś, co założyciele StackOverflow zachęcali od samego początku. – dreeves

Odpowiedz

2

kilka podpowiedzi, nie będę pisać cały kod dla Ciebie:

  • aby uzyskać tablicę z powrotem na PHP -side, jest json_decode. ise to tak:

    $images = json_decode($_POST['whatever']);
  • dostać polecenie do montażu, czy coś takiego (uwaga: należy valitate wszystkie dane wejściowe można dostać pocztą, mam zamiar opuścić to uwagę i skupić się na th " skomplikowanych części”):

    $cmd = "montage"; 
    foreach($images as $image){ 
        $cmd .= " ".$image.".png"; 
    } 
    $cmd .= " temp.png";
  • teraz można wykonać swoje polecenia za pomocą exec lub jeden z jego friends:

    exec($cmd);
  • przynajmniej ustawić png- header i używać readfile lub coś podobnego, aby dostać się „tmp.png”

+0

Mam problem, jak uzyskać dane json w serwisie php. Używam json_decode ($ _ POST [...]), ale daje błąd jako wywołanie niezdefiniowanej funkcji –

+0

@SumedhTambat: plaese spójrz na dicumentation: wymagania dotyczące używania json_decode są PHP 5> = 5.2.0 i PECL json> = 1.2.0 - brzmi jak przynajmniej jeden z nich nie pasuje. – oezi

2

Dzięki oezi za dostarczanie wszystkie kawałki. Oto kompletny program 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'); 
?> 

Wypróbuj go tak:

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

Powinieneś dostać to:

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

(To GET zamiast POST oczywiście, ale program php akceptuje albo.)

+0

+ 1 miłe użycie tablicy array_map - mówię też o czymś podobnym, ale pomyślałem, że byłoby zbyt dużo "narzut" na tak małą rzecz. nie jest, jak dowodzi twój kod. – oezi

Powiązane problemy