Intervention image è una Libreiria php che permette di manipolare le immagini in modo semplice e con una sintassi elegante. Con Intervention è possibile creare immagini di anteprima, crop e watermark utilizzando poche righe di codice.

Integrazione Intervention image e  Laravel

La libreria richiede la versione PHP 5.3 o superiore ed è stutturata come Service Providers e comprende le Laravel Facades in tal modo l’integrazione con il framework sarà semplificata.

Installazione

Nel terminale ci portiamo al livello della root dell’applicazione e digitiamo

composer require intervention/image

Una volta che tutti i file sono stati scaricati possiamo vedere come è stata aggiunta una nuova riga nel file composer.json

"require": {
	"laravel/framework": "4.1.*",
	"intervention/image": "dev-master"
},

ed è stata creata la cartella vendor/intervention
vendor-laravel-intervention

Configurazione di Laravel

Modifichiamo il file config/app.php

Laravel-config-app

Troviamo l’array $providers e aggiungiamo il valore

'Intervention\Image\ImageServiceProvider'

All’array $aliases aggiungiamo invece

'Image' => 'Intervention\Image\Facades\Image'

Testiamo il funzionamento dello script

Per verificare se l’installazione è riuscita correttamente copiamo un’immagine test.jpg nella cartella pubblic di laravel
resize-immagine-laravel
Ridimensioniamo l’immagine a dimensioni fisse di 200 x 100.

Route::get('/resize', function()
{
    $img = Image::make('foo.jpg')->resize(200, 100);

    return $img->response('jpg');
});

Visitando l’URL /resize dovremmo vedere l’immagine ridimensionata a 200 X 100, quindi non in modo proporzionale.

I tre metodi utilizzati nell’esempio

make()

Crea un’istanza di una nuova immagine a partire da un sorgente (ad esempio un path del nostro disco, un’immagine da un url o un’immagine caricata attraverso un form) oppure la crea da zero.

// Crea una nuova risorsa da un file
$img = Image::make('public/foo.jpg');

// or create a new image resource from binary data
$img = Image::make(file_get_contents('public/foo.jpg'));

// Crea una nuova immagine
$img = Image::make(imagecreatefromjpeg('public/foo.jpg'));

// crea una nuova immagine direttamente da un url
$img = Image::make('http://example.com/example.jpg');

// crea una immagine direttamente da un input di laravel
$img = Image::make(Input::file('photo'));

resize()

Ridimensiona in base alle dimensioni passate come primi 2 parametri. Si può passare una funzione anonima come terzo parametro ad esempio per scalare in modo proporzionale l’immagine.

Route::get('/resize', function()
{

    $img = Image::make('ridimens.jpg')->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});

response()

Restituisce una risposta HTTP dell’immagine nel formato e nella qualità inseriti come parametri. I formati supportati sono jpg, png, gif, tif, bmp.

$img->response('jpg', 70);

Altre funzioni

Possiamo trovare tutta una serie di metodi nella pagina ufficiale di intervention image. Ne vedremo solo alcuni che capita spesso di utilizzare.

Crop()

Ritagliamo un rettangolo delle dimensioni specificate con i primi due parametri. Il terzo e il quarto parametro indicano le coordinate dello spigolo sinistro del rettangolo.
Se non specifichiamo nessuna coordinata, il rettangolo sarà centrato rispetto all’immagine.

Route::get('/crop', function()
{

    $img = Image::make('ridimens.jpg')->crop( 100, 100, 0, 0);

    return $img->response('jpg');
});

insert()

Sovrappone un’immagine a all’immagine corrente permettedo di specificare la posizione di partenza e lo scostamento tramite coordinate. Questo metodo può essere utilizzato per utilizzare un’immagine come watermark.

  • $sorgente
    Immagine da inserire sopra un’altra. Vedi make() per i tipi di sorgente per l’immagine.
  • $posizioneIndica la posizione in cui sarà inserita l’immagine. top-left è la posizione di default. Altri valori possibili sono: top, top-right, left, center, right, bottom-left, bottom, bottom-right
  • $x
    scostamento nell’asse delle x
  • $y
    scostamento nell’asse delle y
Route::post('upload', function()
{
    $img = Image::make( Input::file('immagine') );
    $watermark = Image::make( 'cielo_small.jpg' );

    $img->insert(  $watermark, 'center' );

   	return $img->response('jpg', 70);

});

opacity()

Nell’esempio precedente avremmo potuto rendere l’immagine trasparente con il metodo opacity(). Tuttavia specialmente per immagini di grandi dimensioni l’elaborazione è molto dispendiosa. È consigliabile utilizzare un’immagine con l’opacità già impostata.

$watermark = Image::make( 'cielo_small.jpg' )->opacity(50); // opacità in percentuale

save()

Salva l’immagine nel filesystem nello stato in cui si trova. Dopo aver aperto un’immagine con make() e effettuato varie modifiche la salviamo definendo un path di destinazione e la qualità dell’immagine.

// apre l'immagine
$img = Image::make('public/test.jpg')->resize(300, 200);

salva l'immagine con una qualità media
$img->save('public/bar.png', 60);

  inStileWeb.com
blog comments powered by Disqus