Zur Navigation

Mit PHP Bild zentriert skalieren?

1 Tom12

Ich möchte ein Bild, das immer im Querformat ist, zu einem Quadratischen Bild mit einer Auflösung von 1080x1080 Pixeln Skalieren
Dabei soll an allen Seiten (also immer oben, unten & rechts, links) gleich viel weggeschnitten werden

Hier habe ich schon ein Script geschrieben, allerdings leidet darunter die Bildqualität (es sieht alles verwaschen aus) und der Fokus wird nicht auf die Mitte gelegt (also sieht man am ende nur den rechten bzw. linken Rand)

$size = array(720,720); // Breite und Höhe des Auschnitts
$point = array(0,0); // Koordinaten, ab wo kopiert werden soll (erst X, dann Y).
$image = imagecreatefromjpeg("./pixabay/".$_POST['q'].".jpg"); // Original einlesen
$new = imagecreate($size[0],$size[1]);  // Neues Bild leer erstellen
imagecopyresampled($new, $image, 0,0, $point[0],$point[1],$size[0],$size[1], $size[0],$size[1]); // Ausschnitt rüberkopieren 
imagejpeg($new,"./pixabay/".$_POST['q'].".jpg",100); // Neues Bild speichern

Auch wenn ich anstatt der Funktion "imagecopyresampled()" die Funktion "imagecopyresized()" verwende, ändert sich an der Bildqualität nichts :/
Also nochmal zusammengefasst:
Ich suche nach Einem Script mit dem man ohne Qualitätsverlust, Bilder Zentriert zuschneiden kann

MfG
Tom12

20.07.2018 17:19

3 Tom12

Mega,
Vielen Danke

Hier nochmal das was jetzt klappt für alle anderen

	class ImageFactory {
        public  function MakeThumb($thumb_target = '', $width = 60,$height = 60,$SetFileName = false, $quality = 80)
            {
                $thumb_img  =   imagecreatefromjpeg($thumb_target);

                // size from
                list($w, $h) = getimagesize($thumb_target);

                if($w > $h) {
                        $new_height =   $height;
                        $new_width  =   floor($w * ($new_height / $h));
                        $crop_x     =   ceil(($w - $h) / 2);
                        $crop_y     =   0;
                }
                else {
                        $new_width  =   $width;
                        $new_height =   floor( $h * ( $new_width / $w ));
                        $crop_x     =   0;
                        $crop_y     =   ceil(($h - $w) / 2);
                }

                // I think this is where you are mainly going wrong
                $tmp_img = imagecreatetruecolor($width,$height);

                imagecopyresampled($tmp_img, $thumb_img, 0, 0, $crop_x, $crop_y, $new_width, $new_height, $w, $h);

                if($SetFileName == false) {
                        header('Content-Type: image/jpeg');
                        imagejpeg($tmp_img);
                }
                else
                    imagejpeg($tmp_img,$SetFileName,$quality);

                imagedestroy($tmp_img);
            }
    }

// Initiate class
$ImageMaker =   new ImageFactory();
$ImageMaker->MakeThumb("./pixabay/".$_POST['q'].".jpg",1080,1080,"./pixabay/".$_POST['q'].".jpg");

20.07.2018 18:13

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]