2014-04-16 4 views
5

Ich möchte ein Bild mit benutzerdefinierten Verhältnis (width:height)=(5:1)Wie die Größe Bild mit benutzerdefinierten Verhältnis mit Intervention Bibliothek zur Bildbearbeitung in Laravel

also bitte geben Sie mir einige Vorschläge.

+0

Was ist dann Ihr Problem/Ihre Frage, welche Schwierigkeiten Sie haben? –

+1

normalerweise kann ich die Größe des Bildes unter Beibehaltung des tatsächlichen Bildverhältnisses ändern.Aber ich möchte die Größe des Bildes mit einem benutzerdefinierten Verhältnis wie 5: 1 oder 3: 2 ändern ... Wie geht das? – BlackJack

+0

Sie können [diese Antwort] überprüfen (http://stackoverflow.com/questions/22876660/intervention-image-exception-imagenotwritableexception-using-laravel-4/22876779#22876779), könnte hilfreich sein. –

Antwort

4

Ich glaube nicht, Intervention Bildbibliothek hat diese Option in ihrer Funktion zur Größenänderung. Sie können getimagesize() PHP-Funktion verwenden, um die Höhe und Breite zu erhalten und die Breite mit 5 zu teilen (in Ihrem Fall ist es 5, weil Sie 5: 1 wollen), um die Höhe zu erhalten.

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

als Sie gerade resize() Funktion Ihre Intervention auf dieser Höhe und Breite, um die Größe verwenden können.

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

obwohl das das Bild strecken wird . :( – interstellarDust

+2

Oh, wie dumm ich bin.Ich habe diese einfache Lösung nicht gefunden.Thanks bro ... Sie gespeichert meinen Tag .... – BlackJack

+0

Ich bin dankbar, dass diese Lösung für Sie arbeitete ... :) – interstellarDust

5

Ich denke, die beste Lösung sein könnte, fit() aus der Bibliothek zu verwenden.

So:

// 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)); 

Es erstreckt sich das Bild nicht.

+0

Hallo, vielen Dank für die Lösung. Ich werde das versuchen – BlackJack

1

Ich wähle Fit() statt Größe() zu ändern, um das Bild zu vermeiden, das Bild zu viel zu strecken.

Ich verwende ein PHP-Snippet in meinem Projekt, das hilfreich sein könnte.

$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);