Thumbnails Croppen bzw Bildausschnitt

Hallo,

gibt es eine möglichkeit, dass alle Bilder nach dem Thumbnail erstellen die gleiche Größe haben? Sprich immer gleichen AR und Breite und Höhe. Wenn Bilder dem nicht entsprechen sollen sie hochskaliert werden bzw gecropped werden.

Leider haben die Bilder im Shop bei mir alle eine Unterschiedliche Größe wenn die hochgeladenen Artikelbilder nicht alle exakt die gleiche Größe haben.

Hoffe es kann wer helfen.

Gruß

 

Nachtrag:

Wenn ich in die /engine/Shopware/Components/Thumbnail/Generator/Basic.php in der Funktion createNewImage die $newSize Werte fest eintrage, haben alle Bilder die selbe Größe und es wird auch gecropped. Aber somit hat man dann immer nur die eine Größe an Thumbnails. Wieso macht er das nicht automatisch das er die Bilder alle gleich groß macht?

Hi,

ich denke, dass das bei vielen Kunden vielleicht auch gerade nicht gewünscht ist. Grundsätzlich kannst du den Thumbnail-Generator ja sehr gut austauschen / dekorieren, von daher sollte das gut individualisiberbar sein.

Besten Gruß,

Daniel

Danke, habe es nun abgewandelt, so dass die Bilder mittig gecropped werden.

Für Interessierte:

 

    private function createNewImage($image, $originalSize, $newSize, $extension)
    {
        $original_aspect = $originalSize[‚width‘] / $originalSize[‚height‘];
        $thumb_aspect = $newSize[‚width‘] / $newSize[‚height‘];
        if ( $original_aspect >= $thumb_aspect )
        {
           // If image is wider than thumbnail (in aspect ratio sense)
           $new_height = $newSize[‚height‘];
           $new_width = $originalSize[‚width‘] / ($originalSize[‚height‘]  / $newSize[‚height‘]);
        }
        else
        {
           // If the thumbnail is wider than the image
           $new_width = $newSize[‚width‘];
           $new_height = $originalSize[‚height‘] / ($originalSize[‚width‘] / $newSize[‚width‘]);
        }
        
        $newImage = imagecreatetruecolor($newSize[‚width‘], $newSize[‚height‘]);

        if (in_array($extension, [‚jpg‘, ‚jpeg‘])) {
            $background = imagecolorallocate($newImage, 255, 255, 255);
            imagefill($newImage, 0, 0, $background);
        } else {
            // Disables blending
            imagealphablending($newImage, false);
        }
        // Saves the alpha informations
        imagesavealpha($newImage, true);
        // Copies the original image into the new created image with resampling
        imagecopyresampled(
            $newImage,
            $image,
            
            0 - ($new_width - $newSize[‚width‘]) / 2, // Center the image horizontally
            0 - ($new_height - $newSize[‚height‘]) / 2, // Center the image vertically
            0, 0,
            $new_width, $new_height,
            $originalSize[‚width‘],
            $originalSize[‚height‘]
        );

        return $newImage;
    }

1 „Gefällt mir“

Hallo, 

wo muss das hin?

In ein Plugin deiner Wahl :slight_smile:

Viele Grüße