Práca s obrázkami v PHP: Ukážky 2

Jakub Žilinčan  /  11. 07. 2007, 00:00

V péhápéčku sa nedajú tvoriť len jednoduché tvary, aké sme videli v prvých ukážkach. Dnes to bude o zložených obrazcoch a praktickom využití predošlých funkcií.

 

3D kocka
Aj keď má kocka normálne 6 strán, pre vytvorenie 3D efektu nám postačia len 3 strany a správne tieňovanie.
Najprv si vytvoríme truecolor obrázok o rozmeroch 300x300 pixelov. Potom si namiešame všetky potrebné farby. Nakoniec začneme kresliť steny.
Na ľavú bočnú a hornú stenu použijeme imagefilledpolygon(), a na prednú stenu imagefilledrectangle().
S filled funkciami sme sa síce ešte nestretli, ale vôbec sa nelíšia od tých pôvodných. Teda napríklad imagerectangle() je to isté ako imagefilledrectangle(), akurát zadaná farba sa neaplikuje len na vytýčenie okrajov, ale vyfarbí celú plochu.

<?php
$im=imagecreate(300,300); //obrazok 300x300

//namiesanie farieb
$biela=imagecolorallocate($im,255,255,255);
$tmavoseda=imagecolorallocate($im,175,175,175);
$svetleseda=imagecolorallocate($im,205,205,205);
$seda=imagecolorallocate($im,239,239,239);
$cierna=imagecolorallocate($im,0,0,0);

//urcime si body polygonu lavej bocnej steny
$body=array (
20, 20,
20, 220,
55, 255,
55,45
);

//urcime si body hornej steny
$body2=array(
255,45,
220,20,
20,20,
55,45);

//vykreslime
$lava=imagefilledpolygon($im,$body,4,$tmavoseda);
$predna=imagefilledrectangle($im, 55, 45, 255, 255,$svetleseda); //prve dne cisla urcuju suradnice //laveho horneho rohu, a druhe dve suradnice praveho dolneho rohu stvoruholnika
$horna=imagefilledpolygon($im,$body2,4,$seda);

//a zobrazime
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
?>

 

3D Koláčový graf
Vytvoríme si obrázok 100x100 pixelov. Pozadie bude biele, a okrem toho si namiešame pár ďalších farieb. Pre vytvorenie 3D efektu použijeme cyklus for(). To znamená, že budeme vykreslovať kružnicu, vždy posunutú o $i pixelov zhora.
Začneme na odstupe 60 pixelov, a cyklus sa bude opakovať, kým neskončíme na 50- tich pixeloch. To nám vytvorí ako keby bočnú stenu grafu.
Ten bude rozdelený v pomere 285:30:45 stupňov. Napokon, po ukončení cyklu, ešte vykreslíme vrchnú svetlú časť "koláča", čo ešte viac umocní 3D efekt.

<?php

// vytvoríme obrázok
$image = imagecreate(100, 100);
// namiesame farby
$biela    = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$seda     = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
$tmavoseda = imagecolorallocate($image, 0x90, 0x90, 0x90);
$modra     = imagecolorallocate($image, 0x00, 0x00, 0x80);
$tmavomodra = imagecolorallocate($image, 0x00, 0x00, 0x50);
$cervena     = imagecolorallocate($image, 0xFF, 0x00, 0x00);
$tmavocervena  = imagecolorallocate($image, 0x90, 0x00, 0x00);

// spustime cyklus, ktory vytvori bocnu stranu grafu

for ($i = 60; $i > 50; $i--) {
imagefilledarc($image, 50, $i, 100, 50, 0, 45, $tmavomodra, IMG_ARC_PIE);
  imagefilledarc($image, 50, $i, 100, 50, 45, 75 , $tmavoseda, IMG_ARC_PIE);
  imagefilledarc($image, 50, $i, 100, 50, 75, 360 , $tmavocervena, IMG_ARC_PIE);
}

//vykreslime svetlejsi vrch
imagefilledarc($image, 50, 50, 100, 50, 0, 45, $modra, IMG_ARC_PIE);

imagefilledarc($image, 50, 50, 100, 50, 45, 75 , $seda, IMG_ARC_PIE);

imagefilledarc($image, 50, 50, 100, 50, 75, 360 , $cervena, IMG_ARC_PIE);

// a zobrazime
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>

Ako ste si všimli, farba sa dá namiešať dvoma spôsobmi.
$biela    = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
je ekvivalentom
$biela    = imagecolorallocate($image, 0, 0, 0);
ktorý sme používali doteraz.

Okrem toho, IMG_ARC_PIE znamená, že okraje kružnice budu vykreslené v celku. Existuje ešte pár podobných nastavení, no konečný rozdiel je takmer nebadateľný.

Pozn.: tento skript bol prebraný zo stránky www.php.net.

Zatiaľ sme sa pohrali len s vykreslovaním pomocou PHP funkcií. Nabudúce sa Vám budem snažiť priblížiť prácu s reálnymi obrázkami. Pozrieme sa na zmenu veľkostí a pridávanie watermarku.

Neprehliadnite: