Manipolazione delle immagini in Php

con la classe Simple Image di Cory LaViska.

Se vi ritrovate a creare del codice php in cui dovete lavorare con la libreria per l'elaborazione delle immagini GD potreste fare a meno di impazzire ed usare questo script dell'autore di A Beautiful Site, studio di sviluppo web. Io stesso uso di questa classe, nei miei cms per il web.

Attenzione! Questo codice serve per ridimensionare tramite programmazione, se cercate invece un programma che faccia questo lavoro sulle immagini direttamente dal desktop potete usare FastStone Image viewer. Se avete bisogno di un framework javascript che permetta di farlo via browser potreste studiare resize di jQuery UI.

Oltre alle comode funzioni per Ridimensionare e Ritagliare le immagini (si! mantenendo le proporzioni), permette anche di Convertire, Specchiare, Ruotare, regolare Luminosità e contrasto nonchè di ottenere scale di grigi e sfocature oltre che funzioni di aggiunta di testo e di Watermark.

Il codice è in licenza MIT/GPLv2 ed è disponibile su github

Demo di questi esempi con Simple Image

Ecco come usarlo:

  1. Innanzitutto va incluso il file, facendo riferimento al percorso dove si trova, ad esempio nella cartella inc/

    include('inc/Simple_Image.class.php');

    o, se la cartella si trova nella root o in una posizione superiore dpve stiamo includendo, va specificato ../ per ogni cartella precedente:

    include('inc/Simple_Image.class.php');

  2. Le funzioni per la manipolazione sono funzioni statiche quindi vanno richiamate con la notazione dei due punti ::

    Simple_Image::resize_to_width('immagine.jpg', 'immagine-ridimensionata.jpg', 2000);

    La precedente chiamata apre l'immagine.jpg (nella stessa cartella del file .php), ne ridimensiona la larghezza a 2000pixel e la salva con il nome immagine-ridimensionata.jpg

    Facile no?

  3. è importante fare attenzione alla posizione delle immagini che apriamo e che salviamo. Ad esempio se volessi ruotare un'immagine che si trova nella sottocartella media/ dovrei scrivere:

    Simple_Image::rotate('media/da-ruotare.jpg', 'media/ruotata.jpg', 180);

    questo codice aprirà l'immagine da-ruotare.jpg, gli farà fare un giro di 180 gradi (sottosopra) e la salverà, sempre nella cartella media/, con il nome ruotata.jpg
  4. Per aumentare il contrasto, ad esempio del 50 percento:

    Simple_Image::contrast('media/da-contrastare.jpg', 'media/contrastata.jpg', 50);

  5. Seguono le altre funzioni con i relativi esempi auto esplicativi, considerate che i segnaposto tra parentesi quadre [] servono per spiegare come vanno specificati i valori: quindi al posto di [numero da 0 a 100] andrà scritto un qualsiasi valore intero da 0 a 100. (es.35). Se le parentesi sono tra virgolette, esse vanno mantenute in quanto il valore deve essere una stringa

    Simple_Image::convert('immagine-da-convertire.jpg', 'immagine-convertita.[gif, jpg oppure png]');
    Simple_Image::flip('immagine.jpg', 'immagine-specchiata.jpg', '[direzione: la lettera X o Y]');
    Simple_Image::rotate('immagine.jpg', 'immagine-ruotata.jpg', [gradi: un numero da -360 a 360]);
    Simple_Image::grayscale('immagine.jpg', 'immagine-in-scala-di-grigi.jpg');
    Simple_Image::invert('immagine.jpg', 'immagine-invertita.jpg');
    Simple_Image::brightness('immagine.jpg', 'immagine-luminosita.jpg', [un numero da -255 a 255]);
    Simple_Image::contrast('immagine.jpg', 'immagine-contrastata.jpg', [un numero da 0 a 100]);
    Simple_Image::colorize('immagine.jpg', 'immagine-aggiunge-un-colore.jpg', [rbga : tre numeri da 0 a 255 ed uno da 0 a 100 separati da virgola]);
    Simple_Image::edgedetect('immagine.jpg', 'immagine-bordi-contrastati.jpg');
    Simple_Image::emboss('immagine.jpg', 'immagine-in-rilievo.jpg');
    Simple_Image::blur('immagine.jpg', 'immagine-sfocata.jpg', [un numero]);
    Simple_Image::smooth('immagine.jpg', 'immagine-ammorbidita.jpg', [un numero]);
    Simple_Image::pixelate('immagine.jpg', 'immagine-quadrettata.jpg', [la dimensione dei quadrati: un numero]);
    Simple_Image::sepia('immagine.jpg', 'immagine-seppiata.jpg');
    Simple_Image::resize('immagine.jpg', 'immagine-ridimensionata.jpg', [pixel larghezza], [pixel altezza]);
    Simple_Image::resize_to_width('immagine.jpg', 'immagine-ridimensionata-in-larghezza.jpg', [pixel larghezza]);
    Simple_Image::resize_to_height('immagine.jpg', 'immagine-ridimensionata-in-altezza.jpg', [pixel altezza]);
    Simple_Image::shrink_to_fit('immagine.jpg', 'immagine-ristretta-proporzionalmente.jpg', [pixel massima larghezza], [pixel massima altezza]);
    Simple_Image::crop('immagine.jpg', 'immagine-ritagliata.jpg', [numero: posizione iniziale di ritaglio X], [numero: posizione iniziale di ritaglio Y], [pixel larghezza], [pixel altezza]);
    Simple_Image::square_crop('immagine.jpg', 'immagine-ritaglio-quadrato.jpg', [numero: altezza o larghezza finale -in base all'orientamento- nonchè la dimensione del taglio del lato - opposto - in eccesso]);
    Simple_Image::watermark('immagine.jpg', 'immagine-con-sopra-un-altra-immagine.jpg', '[nome del file immagine da sovrapporre]', '[posizione verticale: top, bottom o center]-[posizione orizzontale: right, left o center], [distanza dal bordo orizzontale in pixel], [distanza dal bordo verticale in pixel]);
    Simple_Image::text('immagine.jpg', 'immagine-con-sopra-del-testo.jpg', '[testo da inserire]', '[font da usare, arial.ttf]', [dimensione del font : numero], '[colore del testo: #f00 è rosso]', '[posizione verticale: top, bottom o center]-[posizione orizzontale: right, left o center], [distanza dal bordo orizzontale in pixel], [distanza dal bordo verticale in pixel]);

  6. Per vedere la DEMO di come funziona questa classe, visita: