Manipolare immagini in PHP con le librerie GD e Imagick

Manipolare immagini in PHP con le librerie GD e Imagick

Nello sviluppo web capita spesso di dover manipolare immagini per mostrare avatar, banner, miniature o qualsiasi altro tipo di immagine sul tuo sito. PHP mette a disposizione diverse librerie per la gestione delle immagini, in particolare GD e Imagick. In questo articolo ti presentiamo le funzioni principali di entrambe e ti diamo esempi di codice per usarle nella tua applicazione PHP.

Usare la libreria GD in PHP

GD è una libreria PHP che permette di manipolare le immagini. È inclusa nella maggior parte delle installazioni PHP predefinite, il che ne fa una soluzione semplice da usare e alla portata di tutti. GD supporta i seguenti formati di immagine: JPG, PNG, GIF, BMP e WBMP.

Caricare e mostrare un’immagine con GD

Per caricare un’immagine con GD puoi usare la funzione imagecreatefrom*() corrispondente al tipo di immagine (jpg, png, gif, ecc.). Questa funzione restituisce una risorsa GD che rappresenta l’immagine caricata in memoria. Puoi poi usare la funzione header e la funzione image*() corrispondente al formato dell’immagine (imagejpeg, imagepng, imagegif, ecc.) per mostrare l’immagine nel browser.

php
<?php
// Carica l'immagine in una risorsa GD
$image = imagecreatefromjpeg('image.jpg');

// Mostra l'immagine
header('Content-Type: image/jpeg');
imagejpeg($image);

Ridimensionare un’immagine con GD

Per ridimensionare un’immagine con GD puoi usare la funzione imagecopyresampled. Questa funzione copia e ridimensiona un’immagine GD indicando le dimensioni di destinazione e applicando un’interpolazione che migliora la qualità dell’immagine ridimensionata.

php
<?php
// Carica l'immagine in una risorsa GD
$image = imagecreatefromjpeg('image.jpg');

// Ridimensiona l'immagine
$image_resized = imagecreatetruecolor(200, 200);
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, 200, 200, imagesx($image), imagesy($image));

// Mostra l'immagine ridimensionata
header('Content-Type: image/jpeg');
imagejpeg($image_resized);

Aggiungere del testo a un’immagine con GD

Per aggiungere del testo a un’immagine con GD puoi usare la funzione imagettftext. Questa funzione aggiunge del testo a un’immagine GD indicando il font, la dimensione, l’angolo e il colore del testo.

php
<?php
// Carica l'immagine in una risorsa GD
$image = imagecreatefromjpeg('image.jpg');

// Aggiungi del testo all'immagine
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 30, $text_color, 'arial.ttf', 'Hello World !');

// Mostra l'immagine
header('Content-Type: image/jpeg');
imagejpeg($image);

Usare la libreria Imagick

Imagick è un’altra libreria PHP per la gestione delle immagini. Offre funzionalità più avanzate di GD, come la gestione di livelli e maschere, la conversione di formato, il rilevamento dei bordi e la riduzione del rumore. Imagick supporta un gran numero di formati di immagine, compresi quelli vettoriali come SVG.

Per usare Imagick devi prima verificare che l’estensione PHP imagick sia installata e attiva sul tuo server. Puoi controllarlo eseguendo questo comando:

php
php -m | grep imagick

Se Imagick compare nell’elenco delle estensioni caricate, puoi usare le classi e i metodi della libreria nel tuo codice PHP. In caso contrario dovrai installare e attivare l’estensione Imagick sul server.

Caricare e mostrare un’immagine con Imagick

Per caricare un’immagine con Imagick puoi creare un oggetto della classe Imagick indicando il percorso dell’immagine. Questo oggetto rappresenta l’immagine caricata in memoria e i suoi metodi ti permettono di manipolarla. Per mostrarla basta usare echo sull’oggetto Imagick.

php
<?php
// Carica l'immagine in un oggetto Imagick
$imagick = new Imagick('image.jpg');

// Mostra l'immagine
header('Content-Type: image/jpeg');
echo $imagick;

Ridimensionare un’immagine con Imagick

Per ridimensionare un’immagine con Imagick puoi usare il metodo resizeImage dell’oggetto Imagick. Questo metodo ridimensiona l’immagine indicando le dimensioni di destinazione e applicando un filtro di resampling che migliora la qualità dell’immagine ridimensionata. Imagick propone diversi filtri di resampling, come FILTER_LANCZOS, FILTER_BOX o FILTER_CUBIC.

php
<?php
// Carica l'immagine in un oggetto Imagick
$imagick = new Imagick('image.jpg');

// Ridimensiona l'immagine
$imagick->resizeImage(200, 200, Imagick::FILTER_LANCZOS, 1);

// Mostra l'immagine ridimensionata
header('Content-Type: image/jpeg');
echo $imagick;

Aggiungere del testo a un’immagine con Imagick

Per aggiungere del testo a un’immagine con Imagick puoi usare il metodo annotateImage dell’oggetto Imagick. Questo metodo aggiunge del testo all’immagine indicando il font, la dimensione, l’angolo e il colore del testo.

php
<?php
// Carica l'immagine in un oggetto Imagick
$imagick = new Imagick('image.jpg');

// Aggiungi del testo all'immagine
$draw = new ImagickDraw();
$draw->setFont('arial.ttf');
$draw->setFontSize(20);
$draw->setFillColor('black');
$imagick->annotateImage($draw, 10, 30, 0, 'Hello World !');

// Mostra l'immagine
header('Content-Type: image/jpeg');
echo $imagick;

Conclusione

In questo articolo abbiamo presentato le funzioni principali delle librerie GD e Imagick per la gestione delle immagini in PHP. Abbiamo visto come caricare e mostrare un’immagine, come ridimensionarla e come aggiungerci del testo. Ora puoi usare questi esempi di codice per integrare queste funzionalità nella tua applicazione PHP. Non esitare a esplorare gli altri metodi e le altre opzioni offerte dalle due librerie per ampliare ancora di più le possibilità di elaborazione delle immagini in PHP.

PHP

Damien Flandrin Sviluppatore web dal 2010, creatore di Gekkode e di Email Impact. Ogni articolo è testato su un progetto reale prima della pubblicazione. Contatti
Newsletter

I nuovi test, tutorial e progetti, via e-mail.

Test riproducibili, codice versionato, risultati datati. Mai spam.