L’arte di elaborare l’immagine con php (Parte1)

Immagine originale tratta da Fotolia
Tempo stimato di lettura: 3 minuti, 56 secondi
Pubblicato il 17 Aprile 2014

Ma come fanno i siti con stock di foto a mettere la loro texture sopra ogni fotografia caricata? Come fa Google+ a sfocare la foto che imposto come copertina del mio profilo?

Senz’altro avranno a disposizione qualche particolare tecnologia!!

E invece no. Non tutti sanno che è possibile manipolare le immagini usando “semplicemente” php. Oggi impareremo le nozioni base per elaborare l’immagine con php.

Gli strumenti necessari

Non tutti sanno che quasi ogni server mette a nostra disposizione GD imaging (Documentazione su php.net), che nelle mani giuste risulta essere davvero uno strumento potente. Per prima cosa dobbiamo verificare che sia attivo sul server che stiamo utilizzando. Per farlo andremo a creare un file index.php con al suo interno la funzione:

<?php phpinfo(); ?>

Raggiungendo con un browser la posizione del file avremo una pagina che ci elenca tutte le informazioni legate al php, compresi i servizi attivi, in questa pagina dobbiamo accertarci di trovare la seguente sezione:

img1

Da qui possiamo verificare se GD è attivo o meno, ed anche di quali funzionalità possiamo disporre. Se non è disponibile ed abbiamo la possibilità ed i permessi per installarlo possiamo seguire la guida ufficiale su php.net: http://www.php.net/manual/en/image.installation.php

Muoviamo i primi passi

Diciamo subito che è buona norma abilitare il report degli errori (almeno in fase di sviluppo) in questo modo sarà più semplice identificare e risolvere eventuali problemi.

Per farlo basterà scrivere in cima al nostro file php:

<?php
ini_set("display_errors", "1");
error_reporting(E_ALL); 
?>

Prima di iniziare la nostra opera d’arte, dovremmo sapere ancora due cose. In primo luogo è necessario definire il content-type corretto del file, se ad esempio stiamo creando un png dovremmo impostare l’header come segue:

header('content-type: image/png');

Inoltre dovremmo tenere presente che alla fine delle operazioni sulla nostra immagine dovremmo definire e stampare la stessa. Quindi continuando con l’idea di creare un file png andremo a scrivere:

imagepng($immagine);

Dove $immagine è l’oggetto contenente tutte le informazioni legate alla nostra immagine. Il nostro file somiglierà quindi a questo:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);

header('content-type: image/png');

/** TUTTE LE NOSTRE OPERAZIONI SULL'IMMAGINE **/

imagepng($imagine);
?>

 Impariamo a disegnare

Ora che siamo pronti ad iniziare disegneremo un quadrato grigio, per prima cosa creeremo l’oggetto immagine, poi lo coloreremo di grigio:

// creo l’oggetto
$immagine=imagecreate(250,250);
// coloro l’immagine
imagecolorallocate($immagine, 155, 155, 155);

Il risultato a questo punto sarà un quadrato grigio di 250X250px. Possiamo usare la funzione imagecolorallocate() per definire colori da usare in seguito:

// definisco il bianco ed il nero
$bianco=imagecolorallocate($immagine, 255, 255, 255);
$nero=imagecolorallocate($immagine, 0, 0, 0);

Altre funzioni interessanti sono imagepolygon() e imagefilledpolygon() che ci permettono di disegnare un poligono partendo da un array contenente le coordinate dei nostri punti. La funzione richiede 4 attributi:

  1. l’oggetto immagine
  2. l’array contenente le coordinate dei punti
  3. il numero di punti
  4. il colore
// definisco i punti del mio poligono
$points=array(
//	X,	Y
	125,	50,
	164,	90,
	149,	90,
	149,	108,
	102,	108,
	102,	90,
	86, 	90,
	125,	50
);

// disegno il pomigono colorandolo di bianco
imagepolygon($immagine, $points, 8, $bianco);

ed il risultato è il seguente:

image01

Se invece usiamo imagefilledpolygon() otterremo un poligono riempito del colore scelto:

 image02

Divertendoci ad inserire altri punti il nostro file php potrebbe arrivare ad assomigliare a questo:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);

header('content-type: image/png');

// creo l’oggetto
$immagine=imagecreate(250,250);
// coloro l’immagine
imagecolorallocate($immagine, 155, 155, 155);

// definisco il bianco ed il nero
$bianco=imagecolorallocate($immagine, 255, 255, 255);
$nero=imagecolorallocate($immagine, 0, 0, 0);

// definisco i punti del mio poligono
$points=array(125,50,164,90,149,90,149,108,181,108,181,34,68, 34,68, 143,198,143,198,162,51, 162,51, 19,198,19,198,125,102,125,102,90,86, 90);

// disegno il pomigono colorandolo di bianco
imagefilledpolygon($immagine, $points, 17, $bianco);

imagepng($immagine);
?>

il cui risultato ci farà sorridere:

image03

Impariamo a scrivere

Come i bambini, prima impariamo a disegnare poi a scrivere. Per prima cosa dobbiamo procurarci il file ttf del font che vogliamo usare. in questo caso useremo OpenSans-Regular, i cui file possiamo scaricarli direttamente da Google Fonts (http://www.google.com/fonts#UsePlace:use/Collection:Open+Sans). Nel nostro esempio andremo a posizionare il file direttamente nella root del nostro progetto, per cui imposteremo la path dei font e lo definiremo come segue:

// imposto la path
putenv('GDFONTPATH=' . realpath('.'));
// definisco il mio font
$OpenSans_Regular='OpenSans-Regular.ttf';

Ovviamente possiamo definire diversi font, l’importante è avere il relativo file ttf caricato all’interno della path impostata.

Ora useremo imagettftext() per inserire il testo “WEBHOUSE”, questa funzione richiede ben 8 attributi:

  1. l’oggetto immagine
  2. la dimenzione del carattere
  3. l’angolazione del testo
  4. la coordinata X
  5. la coordinata Y
  6. il colore
  7. il font
  8. la stringa contenente il testo da inserire

e quindi scriveremo:

// aggiungo un testo
imagettftext($immagine, 28, 0, 20, 220, $bianco, $OpenSans_Regular, 'WEBHOUSE');

Ottenendo quindi:

image04

 

La prossima volta impareremo a tagliare e aggiungere filtri alle nostre immagini o foto.

Puoi scaricare l’esempio completo qui: logo_webhouse

Shares