2015-03-17 10 views
9

Fiddling around con Intervention 2.0 in Laravel 5. Quello che voglio è manipolare le immagini (dimensione e ritaglio) e utilizzare gli Interventi Image Caching per memorizzare le immagini nella cache. Quello che sostanzialmente cerco di ottenere è la funzionalità del buon vecchio (e insicuro) timthumb.php.Laravel 5 image-intervention/intervention-cache: url/routing flessibile

ho iniziato ad usare questo come esempio:

// routes.php 
Route::get('imager/{src?}', function ($src) 
{ 
    $cacheimage = Image::cache(function($image) use ($src) { 
     return $image->make("files/image/".$src)->resize(100,50); 
    }, 10, true); 

    return Response::make($cacheimage, 200, array('Content-Type' => 'image/jpeg')); 
}); 

Quando carico un'immagine in questo modo:

// template 
<img src="{{"imager/image.jpg"}}"/> 

Funziona benissimo.

Ma ... Nella mia situazione le immagini possono trovarsi in diverse (sotto) directory, a volte in più livelli in profondità. Sono mantenuti nel mio CMS dai loro webmaster.

esempi:

  • file/immagini/image.jpg
  • file/immagini/intestazioni/image.jpg
  • file/immagini/sfondo/colore/image.jpg
  • img/common/logo.png

Questi URL immagine sono caricati da un record di tabella mysql.

Quando tale carica le immagini:

// template 
<img src="{{"imager/files/images/image.jpg"}}"/> 

Il percorso non funziona più. Dopo tutto, file, immagini e images.jpg sono tutti i segmenti url e la quantità di loro potrebbero differire.

L'immagine url (in grassetto) vanno maneggiati come una variabile:

percorso :: get ('imager/file/immagini/image.jpg', funzione ($ src = false)

Quindi dovrei essere in grado di passare fuori rotta i parametri di dimensionamento e ritaglio perché la lunghezza dell'immagine potrebbe variare. Suppongo di poter passare i parametri con una query come? W = 100 & h = 50 & c = true o qualcosa del genere ?


Aggiornamento

Quando uso un parametro di query per l'URL dell'immagine:

Route::get('imager', function() 
{ 
    $src = Input::get('src', 1); 

    $cacheimage = Image::cache(function($image) use ($src) { 
     return $image->make($src)->resize(100,100); 
    }, 1, false); // one minute cache expiry 

    return Response::make($cacheimage, 200, array('Content-Type' => 'image/jpeg')); 
}); 

// template 
<img src="{{"imager?src=files/images/image.jpg"}}"/> 

Questo funziona.

+0

Forse il modo migliore per risolvere questo problema è usare mod_rewrite (se sei su Apache) e fare qualcosa del tipo: RewriteRule^imager/([. *]) \. [Jpg | gif | png] $ imager? src = $ 1 –

+0

Ho avuto questo problema anche con un vecchio progetto Laravel 4. Ho aggiunto tutti i percorsi e i sotto-percorsi alla sezione dei percorsi nel file di configurazione di imagecache. – ChainList

risposta

3

È semplice.Devi solo dire a Laravel che il tuo parametro immagine è composto da lettere, barra, trattino, trattino basso e punto ('[A-Za-z0-9\/\.\-\_]+'), perché per impostazione predefinita la struttura corrisponde a tutto tranne la barra /.

Route::get('imager/{image?}', function($src) { 

    $cachedImage = Image::cache(function($image) use ($src) { 
     return $image->make($src)->resize(100,100); 
    }, 1, false); 

    return Response::make($cachedImage, 200, ['Content-Type' => 'image/jpeg']); 
})->where('image', '[A-Za-z0-9\/\.\-\_]+'); 

È possibile trovare maggiori informazioni su vincolante nel documentation parametro.