IZRADA SAJTA za 10 €

Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa


KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA
Igrice
Slike

Obrada unete slike

U nastavku koda sa početka prethodnog naslova recimo možemo obradjivati učitane slike. PHP ima izuzetno mnogo mogućnosti što se tiče obrade slika ali mi ćemo ovde kao demonstraciju obraditi samo ispisivanje teksta na slici. Na primer na svaku uplodovanu sliku nalepimo u gornjem levom uglu tekst naziva našeg sajta, na primer zaljubi.com . Obzirom da smo omogućili da se uploduju dva tipa slika moramo kreirati i dva koda za obradu. I na primer neka ti kodovi budu smešteni u dva različita fajla i to u jpeg.php i png.php. Naravno, ako je slika tipa na primer jpeg obradjivaće se u jpeg.php skripti te zato u našoj glavnoj skripti moramo odrediti koji tip slike će se obraditi u koji php fajl za obradu:

if ($b=="jpg"){ header("location: jpeg.php?ime=$upfile");}
if ($b=="png") { header("location: png.php?ime=$upfile");}

Još nešto, da nebi smo otvarali bazu kako bi smo isčitali gde smo smestili tekst lokacije slike možemo pomoću komandne linije ?ime=$upfile tu informaciju prebaciti u naše skripte za obradu slike. To nije bezbednosni rizik jer tu liniju i ne vidi korisnik zato što se sve brzo odvija i kad se skripta za ispis slova na slici završi automatski šalje korisnika za umos nove slike i ispisuje "slika je uspešno uplodovana".

E sad skripte jpeg.php i png.php redom izgledaju ovako:

Skripta jpeg.php:

<?php
$a=$_GET["ime"];
$im=imagecreatefromjpeg($a);
$black=imagecolorallocate($im, 0, 0, 0);
$zuta=imagecolorallocate($im, 255, 255, 0);
imagettftext($im, 15, 0, 5, 19, $black, 'star.ttf', 'zaljubi.com');
imagettftext($im, 15, 0, 3, 17, $zuta, 'star.ttf', 'zaljubi.com');
header("Content-type: image/jpeg");
imagejpeg($im, $a);
imagedestroy($im);
header ("location: upload.php");
?>

Skripta png.php:

<?php
$a=$_GET["ime"];
$im=imagecreatefrompng($a);
$black=imagecolorallocate($im, 0, 0, 0);
$zuta=imagecolorallocate($im, 255, 255, 0);
imagettftext($im, 15, 0, 5, 19, $black, 'star.ttf', 'zaljubi.com');
imagettftext($im, 15, 0, 3, 17, $zuta, 'star.ttf', 'zaljubi.com');
header("Content-type: image/png");
imagepng($im, $a);
imagedestroy($im);
header("location: upload.php");
?>

Kao što vidimo ove dve skripte za ispisivanje teksta sajta na slici su malte ne iste, a razlikuju se samo po nastavcima jpeg i png u funkcijama imagecreatefrompng ($a), imagepng ($im, $a) i header("Content-type: image/png").

Pre nego krenemo sa konkretnim objašnjenjem naših skripti daću mali uvod. PHP se sastoji od nekoliko desetina ekstenzija, medju kojima se nalazi i GD grafička biblioteka, koja je zadužena za kreiranje izmedju ostalog JPEG i PNG (izgovara se ping) slika, koje u svetu webdizajna i webprogramiranja veliku ulogu igraju. Nažalost za GIF format firma Unisys ima patent i ako želite koristiti GIF format na svom sajtu onda rizikujete tužbu zbog licence. PNG (Portable Network Graphics) format polako dostiže GIF, ali iako većina browsera podržava PNG, ova trka će potrajati još dugo.

PHP raspolaze sa veoma dosta komandi (preko 100) koje odlično rade sa GD ekstenzijom (ili bibliotekom). Mogućnosti su teoretski neograničene, iako se naravno mora napomenuti da GD nije Adobe Photoshop ili Corel Draw. GD je kao i većina drugih ekstenzija automatski uključena u sve novije verzije PHP-a.

E sad krenimo sa objašnjenjem. U našim skriptama za obradu slika smo postavili zadatak, kao što smo rekli, da automatski na svakoj uplodovanoj slici ispišemo tekst "zaljubi.com". Kao prvo pravimo kopiju naše slike. To radimo sa jednom praktičnom funkcijom imagecreatefromjpeg ($a) čiju vrednost dodeljujemo na primer promenjljivoj $im. Znači kreiramo od jedne postojeće slike jednu novu sliku, odnosno kopiju $im. Sada već možemo upisati naš tekst na sliku. Kasnije ćemo opisati par sitnica, odnosno primeniti par dodatnih komandi kojima ćemo popraviti izgled našeg teksta i slike. Za upisivanje teksta na sliku se koristi funkcija:

imagettftext($im, 15, 0, 3, 17, $zuta, 'star.ttf', 'zaljubi.com');

Kao prvi argument ove funkcije definišemo na kojoj slici ispisujemo tekst. U našem slučaju je naravno $im slika. Dalje, funkcijom definišemo koju vrstu slova ćemo koristiti. U našem slučaju koristimo font slova 'star.ttf' . Zato moramo u istom folderu gde su i naše skripte ubaciti i font koga koristimo za ispis teksta na slici. U našem slučaju je isti folder ali ako se fajl za fontove nalazi u nekom drugom folderu u odnosu na naše skripte onda upisemo tu lokaciju. Takodje funkcijom definišemo od kog piksela na slici treba da počnemo sa ispisom teksta. To definisemo u 4-om i 5-om parametru funkcije. I to na 4-om mestu je x kordinata a na 5-tom mestu u funkciji je y kordinata. Ako stavimo na 4-om i 5-om mestu broj nula to znači da će početi da se ispisuje tekst od krajnjeg gornjeg levog ugla u slici. Normalno slova se ispisuju ispod te tačke. U našem slučaju kao što vidimo je 3 za "x" i 17 za "y" koordinatu. Pomoću promenjljive $zuta = imagecolorallocate ($im, 255, 255, 0) odredjujemo boju našeg teksta. Funkcija Imagecolorallocate() definise RGB KOD boje na konkretnoj slici. U našem slučaju na slici $im definišemo žutu boju pomoću tri RGB broja i to: 255, 255, 0, jer su ti brojevi baš tim redosledom RGB definicija za žutu boju. Takodje definišimo i crnu boju kako bi našem tekstu napravili i senku (čisto da malo ulepšamo ispisivanje teksta) pomoću crne boje $black = imagecolorallocate ($im, 0, 0, 0). Dalje, treći argument u funkciji je ugao pod kojim želimo zarotirati naš tekst. U našem slučaju je bez rotacije, odnosno tekst je horizontalno ispisan. Inače uglovi se povećavaju suprotno od kazaljke na satu. Recimo ako stavimo broj 90 to znači da je tekst zarotiran pod uglom od 90 stepeni, odnosno ispisaće se vertikalni tekst. Drugi argument u funkciji je veličina fonta. I na kraju zadnji argument je u stvari sam tekst koga želimo ispisati u obliku stringa a može tu naravno da stoji i promenjljiva čija je vrednost string a može i broj ako želimo ispisati samo neki broj.

E sad, mi smo tekst ispisali na slici koja je u stvari kopija naše uplodovane slike pa zato sad trebamo da je zapamtimo trajno. Pre nego je trajno zapamtimo moramo definisati koji će tip slike ona biti. To radimo pomocu header("Content-type: image/png");. Zatim pristupamo memorisanju editovane kopije slike. To radimo pomoću funkcije imagepng ($im, $a); . Prvi argument funkcije je editovana kopija naše uplodovane slike, a drugi argument je lokacija gde želimo smestiti tako editovanu sliku. E sad u našem slučaju je to ista lokacija kao i uplodovana slika. Naime, pošto je lokacija ista onda funkcija prvo izbriše staru uplodovanu sliku pa na "njenom mestu" trajno učita editovanu sliku. Još jedna stvar vezano za istu funkciju je, na primer želimo samo da u brouzeru prikažemo editovanu sliku a ne i da je zapamtimo na hostingu, to možemo uraditi ako izostavimo drugi argument u funkciji, to jest ako napišemo imagepng ($im).

E sad pošto smo zapamtili editovanu sliku na hostingu, nije nam više potrebna kopija slike te je brišemo funkcijom imagedestroy ($im). Medjutim kod skripti sa malim brojem redova, kao što je to slučaj kod nas ne moramo koristiti ovu funkciju za brisanje slike jer onog trenutka kad se završi sa skriptom automacki se briše iz memorije editovana kopija.

Na kraju, nakon editovanja slike možemo posetioce proslediti na početku, da recimo unesu još slika, te zato upisujemo header ("location: upload.php").

Moramo napomenuti još nešto vezano za skripte koje edituju slike kao što su naše jpeg.php i png.php. Vi možete u kôdu za editovanje slika pisati bilo koju komandu koja prikazuje nešto u browseru ali sve će biti ignorisano, jer je ovo zapravo sada jedan .jpg ili .PNG file. Znači sve Vaše echo, print i sl. komande neće funkcionisati. To znači, ako otvaramo stranicu koja edituje slike, prikazivaće se samo editovana slika bez ikakvog teksta, pozadine i sl.

E sad pitate se šta dalje sa uplodovanom i editovanom slikom. Pa možemo sa njom da radimo šta nam je volja kao i sa svakom drugom slikom u HTML kodu. Evo sad ću dati kod jedne skripte koja prikazuje sve uplodovane slike čiji nazivi su smešteni u bazi u tabeli slike:

<html><head><title>Prikaz slika</title><meta http-equiv="Content-Language" content="sr">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head><body><h2>Prikaz slika</h2><hr>
<?
include "pvzi.php";
$sql="SELECT idnovost, naziv FROM slike";
if (!$q=mysql_query($sql)){
  echo "nastala je greska pri iscitavanju podataka slike iz baze";
  exit;
}
while ($da=mysql_fetch_array($q)){
     $b = $da["naziv"];
     echo $da["idnovost"]."<br>";
     echo $b;
?>
<p><img border="0" src="<? echo $b;?>" width="500" height="500"></p>
<?
}
?>
</body></html>

Copyright © 2010 BUbaj. Powered By bubaj.com
PHP    PHP sintaksa    Fajl    Niz    String    Funkcija    Objektno programiranje    MySQL    Unos fajla    Datum    Forme    Sesija    Registracija