- Invatati si exersati diferite functii pentru crearea si manipularea imaginilor
- Invatati sa copiati si sa redimensionati suprafete din imagini
In aceasta lectie sunt prezentate, cu exemple, cateva functii utile pentru lucrul cu imagini generate de PHP.
1. Functia imageline()
- Aceasta functie deseneaza o linie in cadrul imaginii, sintaxa generala este urmatoarea:
- imageline("identificator_im", "x1", "y1", "x2", "y2", "id_culoare")
Unde
- - "identificator_im" reprezinta identificatorul de imagine returnat de o functie pentru crearea imaginii, cum e "imagecreate", "imagecreatetruecolor" sau "imagecreatefrompng" (pt. imagine PNG)
- - "x1" si "y1" reprezinta coordonatele de start (x, y) pentru punctul de incepere a liniei (in pixeli, in raport cu marginea din stanga si de sus)
- - "x2" si "y2" reprezinta coordonatele de final (x, y) pentru punctul de terminare a liniei (in pixeli, in raport cu marginea din stanga si de sus)
- - "id_culoare" reprezinta identificatorul de culoare folosit pentru culoarea liniei (returnat de functia "imagecolorallocate")
Iata un exemplu:
<?php
// setare dimensiuni
$height = 40;
$width = 170;
// definirea cadrului de baza a imaginii
$im = imagecreate($width, $height);
// setare culori
$fundal = imagecolorallocate($im, 10, 10, 250);
$line_color = imagecolorallocate($im, 200, 220, 8);
// crearea imaginii
imagefill($im, 0, 0, $fundal);
imageline($im, 50, 10, 120, 10, $line_color); // prima linie
imageline($im, 40, 20, 130, 20, $line_color); // a doua linie
// trimiterea datelor de iesire
header('Content-type: image/jpeg');
imagejpeg($im);
// curatarea memoriei
imagedestroy($im);
?>
- Comentariile necesare sunt deja in codul scriptului.
- Functia "imageline()", folosita de 2 ori, va crea doua linii dupa coordonatele dintre paranteze.
- Rezultatul accestui script este imaginea de mai jos
2. Functia imagearc()
- Aceasta functie deseneaza un arc de cerc centrat pe anumite coordonate date. Sintaxa generala este urmatoarea:
- imagearc("identificator_im", "x1", "y1", "width", "height", "start", "end", "id_culoare")
Unde
- - "identificator_im" reprezinta identificatorul de imagine returnat de o functie pentru crearea imaginii, cum e "imagecreate", "imagecreatetruecolor" sau "imagecreatefrompng" (pt. imagine PNG)
- - "x1" si "y1" reprezinta coordonatele de start (x, y) pentru centrul arcului de cerc (in pixeli, in raport cu marginea din stanga si de sus)
- - "width" si "height" reprezinta lungimea, respectiv inaltimea, arcului de cerc.
- - "start" reprezinta unghiul de inceput al arcului de cerc, in grade
- - "end" reprezinta unghiul de sfarsit al arcului de cerc, in grade. 0o este localizat la pozitia orei 3, arcul de cerc fiind desenat in sensul acelor ceasornicului.
- - "id_culoare" reprezinta identificatorul de culoare folosit pentru culoarea liniei arcului de cerc (returnat de functia "imagecolorallocate")
Iata un exemplu:
<?php
// setare dimensiuni
$height = 100;
$width = 100;
// definirea imaginii
$im = imagecreate($width, $height);
// setare culori
$fundal = imagecolorallocate($im, 10, 10, 250);
$cerc_color = imagecolorallocate($im, 220, 220, 8);
$arc_color = imagecolorallocate($im, 250, 2, 2);
// crearea imaginii
imagefill($im, 0, 0, $fundal);
imagearc($im, 30, 25, 20, 20, 0, 360, $cerc_color); // primul cerc
imagearc($im, 70, 25, 20, 20, 0, 360, $cerc_color); // al doilea cerc
imagearc($im, 50, 44, 70, 70, 25, 150, $arc_color); // ultimul arc de cerc
// trimiterea datelor de iesire
header('Content-type: image/jpeg');
imagejpeg($im);
// curatarea memoriei
imagedestroy($im);
?>
- Comentariile necesare sunt deja in codul scriptului.
- Functia "imagearc()", folosita de 3 ori, va crea arce de cerc dupa coordonatele dintre paranteze. (
Testati singuri scriptul, modificand valorile argumentelor)
- Rezultatul accestui script este imaginea de mai jos
-
Observati ca pot fi create cercuri complete sau arce de cerc, in functie de valoarea in grade a argumentului sapte ("end").
- Pentru a desena un arc de cerc (sau cerc) cu suprafata colorata, nu doar linia de margine, folositi functia "imagefilledarc()".
3. Functia getimagesize()
- Aceasta functie returneaza o matrice cu mai multe elemente ce contin date despre tipul si dimensiunile imagini.
Mai importante sunt primele 2 elemente din matrice (index 0 si 1) care reprezinta lungimea, respectiv inaltimea imaginii; si al patrulea element (index 3) care este un sir cu dimensiunile imaginii.
Iata un exemplu:
<?php
$img = 'imagini/image.png'; // calea catre fisierul cu imaginea
$size = getimagesize($img);
echo "$size[0] - $size[1] <br /> $size[3]";
?>
- "getimagesize()" preia ca argument imaginea si stocheaza datele (matricea) in variabila "$size".
- acest script va afisa un rezultat similar cu cel de mai jos (depinde de imaginea folosita)
270 - 100
width="270" height="100"
4. Functia imagecopy()
- Aceasta functie copie o portiune dintr-o imagine data. Sintaxa generala este urmatoarea:
- imagecopy("identificator_im2", "identificator_im1", "x2", "y2", "x1", "y1", "width", "height")
Unde
- - "identificator_im2" reprezinta identificatorul celei dea doua imagini, rezultata prin suprafata copiata
- - "identificator_im1" reprezinta identificatorul primei imagini (sursa), din care va fi copiata portiunea
- - "x2" si "y2" reprezinta coordonatele de start (x, y) din cadrul celei dea doua imagini, punctul de unde va incepe adaugarea imaginii rezultata prin suprafata copiata
- - "x1" si "y1" reprezinta coordonatele de start (x, y) din prima imagine, de unde va incepe copierea (in pixeli, in raport cu marginea din stanga si de sus)
- - "width" si "height" reprezinta lungimea, respectiv inaltimea, suprafetei copiate.
Iata un exemplu:
- - Avem initial aceasta imagine
- - In continuare urmatorul script va copia si afisa o portiune din imagine
<?php
// preluarea imaginii sursa
$im1 = imagecreatefrompng('imgs/marplo.png');
// definirea identificatorului si a cadrului pt. imaginea 2
// care va rezulta cu suprafata copiata
$im2 = imagecreatetruecolor(170, 50);
// Copierea suprafetei
imagecopy($im2, $im1, 10, 0, 30, 10, 170, 50);
// datele de iesire
header('Content-Type: image/png');
imagepng($im2);
// eliberarea memoriei
imagedestroy($im2);
imagedestroy($im1);
?>
- "imagecopy()" va copia o suprafata din prima imagine, reprezentata prin "$im1" si o va incadra in cea dea doua imagine, reprezentata prin "$im2" (conform coordonatelor date).
- Acest script va returna urmatorul rezultat:
5. Functia imagecopyresized()
- Aceasta functie copie si redimensioneaza o portiune dintr-o imagine data. Sintaxa generala este urmatoarea:
- imagecopyresized("identificator_im2", "identificator_im1", "x2", "y2", "x1", "y1", "width2", "height2", "width1", "height1")
Unde
- - "identificator_im2" reprezinta identificatorul celei dea doua imagini, rezultata cu suprafata copiata si redimensionata
- - "identificator_im1" reprezinta identificatorul primei imagini (sursa), din care va fi copiata portiunea
- - "x2" si "y2" reprezinta coordonatele de start (x, y) din cadrul celei dea doua imagini, punctul de unde va incepe adaugarea imaginii rezultata prin suprafata copiata si redimensionata
- - "x1" si "y1" reprezinta coordonatele de start (x, y) din prima imagine, de unde va incepe copierea suprafetei (in pixeli, in raport cu marginea din stanga si de sus)
- - "width2" si "height2" reprezinta lungimea, respectiv inaltimea, suprafetei rezultata dupa redimensionare.
- - "width1" si "height1" reprezinta lungimea, respectiv inaltimea, suprafetei copiate.
Iata un exemplu:
- - Avem initial aceasta imagine
- - In continuare urmatorul script va copia, redimensiona si afisa o portiune din imagine
<?php
// preluarea imaginii sursa
$im1 = imagecreatefrompng('imgs/marplo.png');
// definirea identificatorului si a cadrului pt. imaginea 2
// care va rezulta cu suprafata copiata si redimensionata
$im2 = imagecreatetruecolor(80, 20);
// Copierea si redimensionarea suprafetei
imagecopyresized($im2, $im1, 0, 0, 10, 10, 80, 20, 170, 50);
// datele de iesire
header('Content-Type: image/png');
imagepng($im2);
// eliberarea memoriei
imagedestroy($im2);
imagedestroy($im1);
?>
- "imagecopyresized()" va copia o suprafata din prima imagine =, reprezentata prin "$im1" si o va redimensiona si incadra in cea dea doua imagine, reprezentata prin "$im2" (conform coordonatelor date).
- Acest script va returna urmatorul rezultat:
-
Pentru copierea si redimensionarea imaginii cu "resambling", puteti folosi functia imagecopyresampled().
O lista completa cu functiile care pot fi folosite pentru lucrul cu imagini in PHP gasiti aici Functii pentru imagini