Come ritagliare un’immagine con PHP

Ti è mai capitato di avere un’immagine e di avere la necessità di doverne ritagliare una parte con delle misure stabilite? Utilizzando una libreria PHP e le relative funzioni è possibile farlo senza difficoltà.
Ma scopriamo come, con un semplice esempio.
- Leggi l'articolo, ti bastano solo 2 minuti, 25 secondi
Sei di fretta? Scarica il PDF e consultalo quando vuoi!
La libreria GD
GD, attualmente arrivata alla versione 2, è una libreria ideata con lo scopo di manipolare e modificare le immagini.
La prima cosa da fare, è controllare se sul tuo server la libreria è abilitata: crea un file info.php nello spazio FTP del tuo sito, con all’interno una semplice istruzione:
<?php phpinfo(); ?>
dopodiché, accedi alla pagina appena creata tramite browser:
http://{dominio_del_sito}/info.php
otterrai una schermata simile a questa:
In breve, quello che ci si presenta, è il riepilogo della configurazione Apache del server, dei parametri PHP e delle estensioni attive; quello che ci interessa, è la sezione GD, dove è possibile verificare se l’estensione è attiva:
Nel caso in cui non lo sia, hai bisogno di installarla sul server su cui ne hai bisogno (se hai l’abilitazione a farlo) o richiedere all’amministratore del server di farlo.
Ritagliamo un'immagine
Per prima cosa, scegliamo un’immagine da ritagliare:
ed ipotizziamo di volerne ritagliare la scritta “CODE”.
Utilizziamo la funzione imagecreatefrompng( $filename ), che si occupa di istanziare un’immagine a partire da una già esistente, passando come parametro il percorso dell’immagine che vuoi ritagliare:
$sorgente = imagecreatefrompng( 'logo.png' ); $destinazione = imagecreatetruecolor( 270, 90 );
La funzione imagecreatetruecolor( $width, $height ), invece, crea un’immagine vuota delle dimensioni specificate (270×90 nell’esempio).
Il prossimo passaggio, è l’esecuzione del ritaglio:
imagecopy( $destinazione, $sorgente, 0, 0, 80, 120, 270, 90 );
La funzione imagecopy( $dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h ) richiede otto parametri:
- La destinazione dove salvare il ritaglio, nel nostro caso utilizziamo l’immagine vuota precedentemente generata;
- L’immagine da ritagliare, nel nostro caso l’istanza dell’immagine da cui siamo partiti;
- Le coordinate x e y che individuano il punto da cui partirà l’inserimento del ritaglio sull’immagine di destinazione;
- Le coordinate x e y che individuano il punto da cui far partire il ritaglio dell’immagine sorgente;
- La grandezza (larghezza e altezza) del ritaglio.
Ora che abbiamo creato la nostra immagine, non ci resta che stamparla a video:
header( 'Content-Type: image/png' ); imagepng( $destinazione ); imagedestroy( $destinazione ); imagedestroy( $sorgente );
ed eliminare dalla memoria le istanze create.
Ecco lo script completo:
<?php $sorgente = imagecreatefrompng( 'logo.png' ); $destinazione = imagecreatetruecolor( 270, 90 ); imagecopy( $destinazione, $sorgente, 0, 0, 80, 120, 270, 90 ); header( 'Content-Type: image/png' ); imagepng( $destinazione ); imagedestroy( $destinazione ); imagedestroy( $sorgente );
Salvare le immagini
E se anziché stampare a video il risultato volessi salvarlo in un nuovo file .png, è possibile?
Certo che sì! Ti basta eliminare la riga 8 e sostituire la riga 9 con il seguente codice:
imagepng( $destinazione, 'cropped_logo', 0 );
ed il gioco è fatto!
Ecco il risultato finale:
Naturalmente, è possibile modificare le immagini non solo in formato .png come nell’esempio proposto, ma anche in altri formati con le opportune funzioni. Per approfondire l’argomento e le possibilità che la libreria GD2 offre, dai un’occhiata alla documentazione ufficiale: