online: 7; azi: 1115; total: 53121 Webdesign - Phpmysql - 74

Functii utile pentru lucrul cu imagini

  • 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
Imagine creata cu PHP

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
Imagine creata cu PHP
- 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 Imagine pt. script PHP
  • - In continuare urmatorul script va copia si afisa o portiune din imagine
<?php
// preluarea imaginii sursa
$im1 = imagecreatefrompng('_cursuri-online/web-design/phpmysql/_imgs/discant.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:
Imagine creata cu PHP

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 Imagine pt. script PHP
  • - In continuare urmatorul script va copia, redimensiona si afisa o portiune din imagine
<?php
// preluarea imaginii sursa
$im1 = imagecreatefrompng('_cursuri-online/web-design/phpmysql/_imgs/discant.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:
Imagine creata cu PHP
- 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