Sunteți pe pagina 1din 25

Imagini PHP

• Funcţiile responsabile de gestionarea imaginilor dinamice sunt incluse


în librăria open source numită GD.

• Informatii despre aceasta librărie se pot găsi la


http://www.boutell.com/gd/.

• Pentru a crea imagini dinamice trebuie să instalaţi aceasta librărie.

• Vechea variantă a librăriei permite crearea de imagini în format GIF.

• Sistemele ulterioare nu suportă GIF din motive de licenţiere şi în locul


formatului GIF acestea utilizeaza formatul PNG.
Activarea librariei GD in XAMPP
• Pentru a activa biblioteca gd in xampp va trebui sa editati fisierul
php.ini (c:/xampp/php/php.ini) astfel:

inlocuiti linia:

;extension=php_gd2.dll
cu linia:
extension=php_gd2.dll
Vom parcurge:

1. cum se crează şi se afişează o imagine


2. cum se lucrează cu culori
3.cum se desenează forme, inclusiv arce, dreptunghiuri şi poligoane
4. cum se colorează suprafeţe
5. cum se lucrează cu TrueType fonts
Crearea şi afişarea imaginilor
• Înainte de a începe lucrul cu imagini trebuie obţinut un identificator de
imagine.

• Acest lucru se face utilizând funcţia imagecreate().


• Aceasta funcţie are 2 argumente: înălţimea şi lăţimea imaginii şi returnează
un identificator de imagine care va fi folosit cu alte funcţii din aceasta
secţiune.

• Pasul următor pentru a fişa o imagine este să apelăm funcţia imagepng() care
are ca argument identificatorul de imagine obţinut anterior.
<?php
header("Content-type: image/png");
$image = imagecreate( 200, 200 );
imagepng($image);
?>

• Obs că am trimis un header Content-type browser-ului înainte de a


face orice altceva.
• Acest lucru a fost făcut pentru a transmite browser-ului să se aştepte
la o imagine, altfel browser-ul va trata ieşirea script-ului ca HTML.
• Script-ul anterior poate fi încărcat direct în browser sau poate fi parte
a unui element img:

• <img src=“imagine.php" alt="a PHP generated image">


Culori
• Pentru a putea lucra cu culori, trebuie obţinut un identificator de
culoare.
• Acest lucru se face utilizand funcţia imagecolorallocate() care are ca
argument un identificator de imagine şi 3 întregi cu valori între 0 şi
255 care vor reprezenta culorile roşu, verde şi albastru.
• Funcţia returnează un identificator de culoare care poate fi utilizat
pentru a colora text, diferite contuturi, etc.

$red = imagecolorallocate($image, 255,0,0);


• La primul apel al funcţiei imagecolorallocate(), se stabileşte culoarea
implicită a imaginii
• Codul urmator va crea un patrat rosu:

<?php
header("Content-type: image/png");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
imagepng($image);
?>
Desenarea liniilor
• O imagine poate fi interpretată ca un bloc de pixeli indexaţi de la zero
pe orizontală şi pe verticală, originea fiind în colţul din stânga sus al
imaginii.
• Deci, pixelul de coordonate 5, 8 este al şaselea pixel pe orizontala şi al
9-lea pixel pe verticală faţă de colţul din stanga sus al imag.
• Funcţia imageline() desenează o linie care uneşte pixelii.
• Aceasta funcţie are 6 argumente:
1. un identif de imagine
2. 4 nr întregi ce reprez coord de start şi de final ale liniei
3. un identificator de culoare
• Salvati codul urmator ca imagine2.php

<?php
header("Content-type: image/jpeg");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
imageline( $image, 0, 0, 199, 199, $blue );
imagejpeg($image);
?>
Colorarea

Funcţia imagefill() are 4 argumente:

1.un identificator de imagine,


2. două coordonate care marchează partea de început a colorării
3.un identificator de culoare
• Exemplu:

<?php
header("Content-type: image/png");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
imageline( $image, 0, 0, 199, 199, $blue );
imagefill( $image, 0, 199, $blue );
imagepng($image);
?>
Desenarea unui arc
• Se poate desena un arc(o elipsă parţială) parţial sau un arc complet cu imagearc().
• Functia imagearc() are urmatoarele argumente:

int imagearc ( resource image, int cx, int cy, int w, int h, int s, int e, int color)

1.un obiect imagine


2. coordonatele centrului
3. lăţimea -- un întreg
4. înălţimea -- un întreg
5. un punct de start şi un punct final (în grade)
6. un identificator de culoare
Arcele sunt desenate în sensul acelor de ceas.
• Codul următor desenează un sfert de cerc cu centrul în pct 99,99:

imagearc( $image, 99, 99, 200, 200, 0, 90, $blue );

• Lăţimea şi înălţimea vor fi 200 şi 200 pixeli şi va fi desenat cardanul IV.

<?php
header("Content-type: image/png");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
imagearc( $image, 99, 99, 180, 180, 0, 360, $blue );
imagefill( $image, 99, 99, $blue );
imagepng($image);
?>
Desenarea unui dreptunghi
• Se poate desena un dreptunghi utilizand funcţia imagerectangle().
• Functia imagerectangle() are urmatoarele argumente:
1. un identificator de imagine
2. coordonatele colţului din stanga sus ale dreptunghiului
3. coordonatele colţului din dreapta jos ale dreptunghiului
4.un identificator de culoare

• Codul urmator desenează un dreptunghi determinat de colţurile (19,19) şi


(179, 179).

• imagerectangle( $image, 19, 19, 179, 179, $blue );


• Acest dreptunghi de poate colora cu imagefill().
• Deoarece aceste operatii sunt comune, există funcţia PHP
imagefilledrectangle(), care are aceleasi argumente ca şi
imagerectangle(), dar are ca efect colorarea cu culoarea specificată.

<?php
header("Content-type: image/jpeg");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
imagefilledrectangle( $image, 19, 19, 179, 179, $blue );
imagejpeg( $image );
?>
Desenarea unui poligon
• Se pot desena poligoane cu imagepolygon() -- care are urmatoatele
argumente:
1. un identificator de imagine
2. un array ce conţine coordonatele punctelor(vf poligonului)
3. un întreg ce reprezintă numărul de puncte (vf ale poligonului)
4. un identificator de culoare

• Şirul trimis ca argument la imagepolygon() trebuie să fie indexat numeric.


• Primele 2 elemente dau coordonatele primului punct, a doua pereche --
coordonatele celui de al doilea punct, etc.
• imagepolygon() uneşte varfurile poligonului, unind automat ultimul varf cu
primul varf
• Se poate crea un poligon colorat interior cu funcţia imagefilledpolygon().

<?php
header("Content-type: image/png");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
$points = array ( 10, 10,
190, 190,
190, 10,
10, 190
);
imagefilledpolygon( $image, $points, count( $points )/2 , $blue );
imagepng($image);
?>
Culori transparente

• Fcţ imagecolortransparent() permite transformarea unor culori


selectate în culori transparente

• Aceasta funcţie are urmatoarele argumente:

1.un identiificator de imagine


2. un identificator de culoare
• Exemplu:

<?php
header("Content-type: image/png");
$image = imagecreate( 200, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
$points = array ( 10, 10,
190, 190,
190, 10,
10, 190
);
imagefilledpolygon( $image, $points, count( $points )/2 , $blue );
imagecolortransparent( $image, $blue );
imagepng($image);
?>
Scrierea textului cu imageTTFtext()
• Funcţia imageTTFtext() permite scrierea unui text în imagine.
• Aceasta funcţie are urmatoarele 8 argumente:

1. un identificator de imagine
2. înălţimea caracterelor care vor fi scrise
3. un unghi
4. coordonatele de start (x,y)
5. un identificator de culoae
6. o cale la un font TrueType
7. textul ce treb scris

• Punctul de start al textului determină linia pe care va fi scris tot textul.


Exemplu:

<?php
header("Content-type: image/png");
$image = imagecreate( 400, 200 );
$red = imagecolorallocate($image, 255,0,0);
$blue = imagecolorallocate($image, 0,0,255 );
$font = "C:/WINDOWS/fonts/Arial.ttf";
imageTTFtext( $image, 50, 0, 20, 100, $blue, $font, "Welcome!" );
imagepng($image);
?>

• imagettftext() returnează un array cu 8 elemente ce reprezinta cele 4 pct ale


regiunii care marchează scrisul.
• Ordinea acestora este: stg jos, dr jos, dr sus, stg sus.
• Punctele sunt relative la text, indiferent de unghiul de scriere.
Crearea unui cadru cu imageTTFbox()
• Aceasta functie returneaza un cadru in jurul unui text

• Functia imageTTFbox() are urmatoarele argumente:


1.O marimea
2.un unghi
3. o cale la un font TrueType
4.un text

Aceasta functie returneaza un array ce reprezinta coordonatele celor 4


varfuri ale cadrului textului:
0 lower left corner, X position
1 lower left corner, Y position
2 lower right corner, X position
3 lower right corner, Y position
4 upper right corner, X position
5 upper right corner, Y position
6 upper left corner, X position
7 upper left corner, Y position
<?php
// Create a 300x150 image
$im = imagecreatetruecolor(300, 150);
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

// Set the background to be white


imagefilledrectangle($im, 0, 0, 299, 299, $white);

// Path to our font file


$font = './arial.ttf';

// First we create our bounding box for the first text


$bbox = imagettfbbox(10, 45, $font, 'Powered by PHP ' . phpversion());

// This is our cordinates for X and Y


$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

// Write it
imagettftext($im, 10, 45, $x, $y, $black, $font, 'Powered by PHP ' . phpversion());

// Create the next bounding box for the second text


$bbox = imagettfbbox(10, 45, $font, 'and Zend Engine ' . zend_version());

// Set the cordinates so its next to the first text


$x = $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) + 10;
$y = $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;

// Write it
imagettftext($im, 10, 45, $x, $y, $black, $font, 'and Zend Engine ' . zend_version());

// Output to browser
header('Content-Type: image/png');

imagepng($im);
imagedestroy($im);
?>

S-ar putea să vă placă și