4.7. A szerveroldali képgenerálás
Szükségünk lesz egy createjpg.php
fájlra. (Az alábbi technika csak olyan szervereken futtatható, ahol a gd
library telepítve van)
Az egyszerűség kedvéért a PHP egy - a szerveren létező - white.jpg nevű 100*100
pixeles fehér képet alapul véve fogja a kapott adatok alapján a rajzunkat
újragenerálni.
<?php
// új image fájlt készítünk a létező white.jpg fájlból
$im = @imagecreatefromjpeg("white.jpg");
// a flashtől kapott adathalmazt egy for ciklussal
bontjuk fel (*71)
for ($j=1 ; $_POST["px".$j] ; $j++) {
$crnt =
$_POST["px".$j];
// az egyes pixelekhez tartozó adatokat tömbbe rendezzük (*72)
list($xx, $yy, $rr,
$gg, $bb, $end) = split('[_]', $crnt, 6);
// a tömb elemeinek megfelelően az új image fájlunkon
elhelyezzük a szines kis pixeleinket (*73)
$pixcol =
imageColorAllocate($im, $rr, $gg, $bb);
imagesetpixel($im,$xx,$yy,$pixcol);
}
// meghatározzuk e mentendő jpg fájl nevét
$fajlname="created.jpg";
// mentjük az ideiglenes képet, és egyúttal a flashnek
is 'beszámolunk' a végeredményről
if (imagejpeg($im, $fajlname, 75)){
echo
"&resultback=ok&";
}else{
echo
"&resultback=error&";
}
?>
*71 - az egyes adatsorok
px[sorszám]=xpozició_ypozíció_red_green_blue_ formában állnak rendelkezésünkre,
mint az fentebb már láttuk. Amíg ilyen px[sorszám] változó létezik, addig
futtatjuk a for ciklust
*72 - a tömböt a kapott string '_' -okkal való szétvágásával kaphatjuk meg
*73 - az imageColorAllocate() -tal az aktuális $im képünk számára
állíthatunk be egy színértéket (az imént létrehozott tömb $rr, $gg, $bb elemei
alapján), majd ezt a imagesetpixel() -lel a
megfelelő helyre ($xx,
$yy) felülírjuk a $im
ideiglenes képen
Miután a szükséges fájlokat (create_image.html, create_image.swf, createjpg.php, white.jpg) feltöltöttük egy megfelelő szerverre, tesztelés során próbáljuk ki az alkalmazásunk működőképességét.