Arbeiten mit Bildern in PHP: resize, crop (Zuschneiden und Skalieren)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Bildern in PHP: Größenänderung und Zuschneiden (resize, crop)



Die Bildverarbeitung ist eine der häufigsten Aufgaben bei der Entwicklung von Webanwendungen. Das Hochladen von Avataren, das Erstellen von Miniaturansichten, die Anpassung von Bildern an verschiedene Bildschirmauflösungen – all dies erfordert Größenänderungen (resize) und Zuschneiden (crop). In PHP gibt es dafür zwei Hauptwerkzeuge: die integrierte Erweiterung GD und die leistungsstärkere Bibliothek Imagick. In diesem Artikel werden wir beide Ansätze mit praktischen Beispielen behandeln.



1. Die GD-Erweiterung (Standardwerkzeug)



GD ist die beliebteste und am weitesten verbreitete Erweiterung für die Bildbearbeitung. Sie ist in den meisten PHP-Distributionen enthalten und erfordert keine zusätzliche Installation. GD unterstützt die wichtigsten Formate: JPEG, PNG, GIF, WebP.



1.1. Größenänderung (resize) unter Beibehaltung der Proportionen



Eine klassische Aufgabe ist es, ein großes Bild auf eine bestimmte Breite zu verkleinern, wobei das Seitenverhältnis erhalten bleibt. Nachfolgend finden Sie ein Beispiel für eine Funktion, die ein Bild auf die angegebene Breite skaliert.



<?phpfunction resizeImage($srcFile, $destFile, $newWidth) {    // Informationen über das Quellbild abrufen    list($width, $height, $type) = getimagesize($srcFile);

// Neue Höhe proportional berechnen $ratio = $width / $height; $newHeight = $newWidth / $ratio;

// Leinwand für das neue Bild erstellen $srcImage = imagecreatefromjpeg($srcFile); // für JPEG $destImage = imagecreatetruecolor($newWidth, $newHeight);

// Kopieren und skalieren imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// Ergebnis speichern imagejpeg($destImage, $destFile, 90); // Qualität 90%

// Speicher freigeben imagedestroy($srcImage); imagedestroy($destImage);}

// Beispiel zur VerwendungresizeImage('photo.jpg', 'photo_thumb.jpg', 300);?>


Für die Arbeit mit PNG oder GIF müssen die Funktionen imagecreatefrompng() und imagecreatefromgif() verwendet werden, sowie das Speichern über imagepng() oder imagegif().



1.2. Bildzuschnitt (crop) aus der Mitte



Häufig ist es erforderlich, nicht nur zu verkleinern, sondern einen quadratischen Bereich aus der Mitte des Bildes auszuschneiden. Dies wird als zentrierter crop bezeichnet.



<?phpfunction cropCenter($srcFile, $destFile, $cropSize) {    list($width, $height, $type) = getimagesize($srcFile);

// Koordinaten für das Ausschneiden des Quadrats aus der Mitte bestimmen $srcX = ($width - $cropSize) / 2; $srcY = ($height - $cropSize) / 2;

// Wenn das Bild kleiner als die gewünschte Größe ist, einfach skalieren if ($width < $cropSize || $height < $cropSize) { $ratio = min($cropSize / $width, $cropSize / $height); $newWidth = $width * $ratio; $newHeight = $height * $ratio; $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); // Mit weißem Hintergrund füllen $white = imagecolorallocate($destImage, 255, 255, 255); imagefill($destImage, 0, 0, $white); // Mit Zentrierung kopieren imagecopyresampled($destImage, $srcImage, ($cropSize - $newWidth) / 2, ($cropSize - $newHeight) / 2, 0, 0, $newWidth, $newHeight, $width, $height); } else { $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); imagecopyresampled($destImage, $srcImage, 0, 0, $srcX, $srcY, $cropSize, $cropSize, $cropSize, $cropSize); }

imagejpeg($destImage, $destFile, 90); imagedestroy($srcImage); imagedestroy($destImage);}

// Beispiel: Quadrat 200x200 aus der MittecropCenter('photo.jpg', 'photo_cropped.jpg', 200);?>


2. Die Imagick-Bibliothek (fortschrittliches Werkzeug)



Imagick ist ein PHP-Wrapper für das leistungsstarke ImageMagick-Tool. Es biet

Empfehlungen