2014-04-16 8 views
5

voglio ridimensionare un'immagine con rapporto personalizzato (width:height)=(5:1)Come ridimensionare l'immagine con rapporto personalizzato utilizzando la libreria di manipolazione delle immagini di intervento in laravel

quindi per favore dammi qualche suggerimento.

+0

Allora qual è il tuo problema/domanda, quali difficoltà stai affrontando? –

+1

normalmente posso ridimensionare l'immagine mantenendo il rapporto immagine reale.Ma voglio ridimensionare l'immagine utilizzando un rapporto personalizzato come 5: 1 o 3: 2 ... Come fare questo? – BlackJack

+0

È possibile controllare [questa risposta] (http://stackoverflow.com/questions/22876660/intervention-image-exception-imagenotwritableexception-using-laravel-4/22876779#22876779), potrebbe essere utile. –

risposta

4

Non credo che la libreria di immagini di intervento abbia questa opzione nella loro funzione di ridimensionamento. puoi usare la funzione getimagesize() php per ottenere l'altezza e la larghezza e dividere la larghezza con 5 (nel tuo caso è 5 perché vuoi 5: 1) per ottenere l'altezza.

$image=getimagesize($image_file); 
$width=$image[0]; // $image[0] is the width 
$height=$image[0]/5; // $image[1] is the height 

di quanto si può semplicemente utilizzare la funzione del vostro intervento resize() per ridimensionare a che altezza e larghezza.

Image::make($source_image) 
    ->resize($width,$height ,false,false) 
    ->save($destination);` 
+1

anche se questo allungherà l'immagine . :( – interstellarDust

+2

Oh, quanto sono stupido. Non ho trovato questa soluzione facile. Grazie fratello ... mi hai salvato la giornata .... – BlackJack

+0

Sono grato che questa soluzione ha funzionato per te ... :) – interstellarDust

5

Penso che la soluzione migliore potrebbe essere, per usare fit() dalla libreria.

Ti piace questa:

// open 4/3 image for example 
$image = Image::make('foo.jpg'); 

// your desired ratio 
$ratio = 16/9; 

// resize 
$image->fit($image->width(), intval($image->width()/$ratio)); 

E non estende l'immagine.

+0

Ciao, grazie per la soluzione. Ci proverò – BlackJack

1

Scelgo fit() piuttosto che ridimensiona() per modificare l'immagine evitando di allungare troppo l'immagine.

Io uso un frammento di codice php nel mio progetto, che potrebbe essere utile.

$img = Image::make($pictureOriginalPath); 
// Picture ratio 
$ratio = 4/3; 

// Check the current size of img is appropriate or not, 
// if ratio of current img is greater than 1.33, then crop 
if(intval($img->width()/$ratio > $img->height())) 
{ 
    // Fit the img to ratio of 4:3, based on the height 
    $img->fit(intval($img->height() * $ratio),$img->height()); 
} 
else 
{ 
    // Fit the img to ratio of 4:3, based on the width 
    $img->fit($img->width(), intval($img->width()/$ratio)); 
} 

// Save, still need throw exception 
$img->save($pictureNewPath); 
Problemi correlati