webentwicklung-frage-antwort-db.com.de

Laravel 5.6: Bildminiaturen erstellen

In meinen alten PHP Apps habe ich eine Funktion wie die folgende ausgeführt, um JPEG-Miniaturansichten zu erstellen.

function imageThumbanail() {

 $image_src = imagecreatefromjpeg('http://examplesite.com/images/sample-image.jpg'); 

 $thumbnail_width = 180; //Desirable thumbnail width size 180px

 $image_width = imagesx($image_src); //Original image width size -> 1080px

 $image_height = imagesy($image_src); //Original image height size -> 1080px

 $thumbnail_height = floor( $image_height * ( $thumb_width / $image_width ) ); //Calculate the right thumbnail height depends on given thumbnail width

 $virtual_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);

 imagecopyresampled($virtual_image, $image_src, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $image_width, $image_height);

 header('Content-Type: image/jpeg');

 imagejpeg($virtual_image, null, 100);

 imagedestroy($virtual_image); //Free up memory

}

Das Problem ist, dass ich jetzt eine ähnliche Funktion in einer laravel 5.6 App ausführen möchte, also habe ich einen Controller mit genau der gleichen Funktion erstellt, aber anstatt als Ausgabe das Miniaturbild i zu erhalten bekomme Fragezeichen und seltsame Diamant-Icons, so etwas wie eine verschlüsselte Version des JPEG-Bildes der PHP-Gd-Bibliothek.

Ich habe versucht, return response () -> file ($ pathToFile) zu verwenden. as laravel Dokumentation beschreibt, aber ich werde das Thumbnail-Bild nicht an einem Ort speichern.

Irgendwelche Ideen?

Danke im Voraus!

6

Ich empfehle Ihnen, dieses Paket ist sehr einfach zu installieren und zu verwenden und sehr freundlich mit der Programmierung. Es heißt Intervention

Interventionspaket zum Umgang mit Bildern

Sie können eine Miniaturansicht ganz einfach wie folgt erstellen:

$img = Image::make('public/foo.jpg')->resize(320, 240)->insert('public/watermark.png');
8
Marco Feregrino

Größe ändern und Bild in der Mitte zuschneiden

Es ist nicht erforderlich, ein Paket zu installieren und einzuschließen. Erstellen Sie einfach einen Helfer in laravel/Lumen und fügen Sie den folgenden Code in die Helferdatei ein und verwenden Sie ihn, wo immer Sie möchten:

function resize_crop_image($max_width, $max_height, $source_file, $dst_dir, $quality = 80){
    $imgsize = getimagesize($source_file);
    $width = $imgsize[0];
    $height = $imgsize[1];
    $mime = $imgsize['mime'];

    switch($mime){
        case 'image/gif':
            $image_create = "imagecreatefromgif";
            $image = "imagegif";
            break;

        case 'image/png':
            $image_create = "imagecreatefrompng";
            $image = "imagepng";
            $quality = 7;
            break;

        case 'image/jpeg':
            $image_create = "imagecreatefromjpeg";
            $image = "imagejpeg";
            $quality = 80;
            break;

        default:
            return false;
            break;
    }

    $dst_img = imagecreatetruecolor($max_width, $max_height);
    $src_img = $image_create($source_file);

    $width_new = $height * $max_width / $max_height;
    $height_new = $width * $max_height / $max_width;
    //if the new width is greater than the actual width of the image, then the height is too large and the rest cut off, or vice versa
    if($width_new > $width){
        //cut point by height
        $h_point = (($height - $height_new) / 2);
        //copy image
        imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $max_width, $max_height, $width, $height_new);
    }else{
        //cut point by width
        $w_point = (($width - $width_new) / 2);
        imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $max_width, $max_height, $width_new, $height);
    }

    $image($dst_img, $dst_dir, $quality);

    if($dst_img)imagedestroy($dst_img);
    if($src_img)imagedestroy($src_img);
}
//usage example
resize_crop_image(100, 100, "test.jpg", "test.jpg");

Code wurde bereits viele Male getestet und funktioniert gut. Alles Gute, sparen Sie Zeit und genießen Sie Ihr Leben:)

2
Kamlesh