Arbeiten mit Bildern in PHP: Resize, Crop und Optimierung mit GD und Imagick

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: Resize, Crop und Optimierung

\n\n

Die Bildverarbeitung ist eine der Kernaufgaben bei der Entwicklung von Webanwendungen. Ob Benutzeravatare, Vorschaubilder für Nachrichten oder Produktgalerien – fast immer müssen Sie Bilder in der Größe ändern (resize) und zuschneiden (crop). In PHP gibt es dafür zwei Hauptbibliotheken: GD (integriert) und Imagick (eine Erweiterung auf Basis von ImageMagick).

\n\n

In diesem Artikel behandeln wir beide Ansätze, zeigen funktionierende Codebeispiele und geben Empfehlungen, welche Bibliothek Sie für Ihr Projekt wählen sollten.

\n\n

1. Die GD-Bibliothek (GDLib)

\n\n

GD ist eine standardmäßige PHP-Erweiterung, die auf fast jedem Hosting verfügbar ist. Sie unterstützt die gängigen Formate: JPEG, PNG, GIF, WEBP (ab PHP 7.1+). Ein Nachteil ist die geringere Qualität des Resamplings im Vergleich zu Imagick, aber für die meisten Aufgaben reichen ihre Fähigkeiten aus.

\n\n

1.1. Größe ändern (Resize) mit GD

\n\n

Die Funktion imagecopyresampled() erstellt ein neues Bild mit Interpolation (Glättung). Ein Beispiel für die Skalierung auf eine Breite von 300px unter Beibehaltung der Proportionen:

\n\n
<?php\nfunction resizeImageGD($srcFile, $destFile, $newWidth = 300) {\n    // Abmessungen des Quellbildes ermitteln\n    list($width, $height, $type) = getimagesize($srcFile);\n    \n    // Ressource des Quellbildes je nach Typ erstellen\n    switch ($type) {\n        case IMAGETYPE_JPEG:\n            $src = imagecreatefromjpeg($srcFile);\n            break;\n        case IMAGETYPE_PNG:\n            $src = imagecreatefrompng($srcFile);\n            break;\n        case IMAGETYPE_GIF:\n            $src = imagecreatefromgif($srcFile);\n            break;\n        default:\n            return false;\n    }\n    \n    // Neue Höhe proportional berechnen\n    $ratio = $width / $height;\n    $newHeight = intval($newWidth / $ratio);\n    \n    // Leeres Bild mit der gewünschten Größe erstellen\n    $dst = imagecreatetruecolor($newWidth, $newHeight);\n    \n    // Alphakanal für PNG/GIF aktivieren\n    imagealphablending($dst, false);\n    imagesavealpha($dst, true);\n    \n    // Resampling (Kopieren mit Pixel-Neuberechnung)\n    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);\n    \n    // Ergebnis speichern\n    imagejpeg($dst, $destFile, 85); // Qualität 85%\n    \n    // Speicher freigeben\n    imagedestroy($src);\n    imagedestroy($dst);\n    \n    return true;\n}\n\n// Verwendung:\nresizeImageGD('photo.jpg', 'photo_thumb.jpg', 300);\n?>
\n\n

1.2. Zuschneiden (Crop) mit GD

\n\n

Zum Zuschneiden verwenden wir die Funktion imagecopy() oder imagecopyresampled() mit Angabe des Bereichs. Beispiel – wir schneiden ein zentrales Quadrat von 200x200 aus:

\n\n
<?php\nfunction cropCenterGD($srcFile, $destFile, $cropSize = 200) {\n    list($width, $height, $type) = getimagesize($srcFile);\n    \n    // Typ bestimmen\n    $src = imagecreatefromjpeg($srcFile); // für das Beispiel JPEG\n    \n    // Koordinaten des zentralen Quadrats berechnen\n    $x = ($width - $cropSize) / 2;\n    $y = ($height - $cropSize) / 2;\n    \n    // Wenn das Quellbild kleiner als die Zuschnittgröße ist – nicht zuschneiden\n    if ($width < $cropSize || $height < $cropSize) {\n        $cropSize = min($width, $height);\n        $x = 0;\n        $y = 0;\n    }\n    \n    $dst = imagecreatetruecolor($cropSize, $cropSize);\n    imagecopy($dst, $src, 0, 0, $x, $y, $cropSize, $cropSize);\n    \n    imagejpeg($dst, $destFile, 90);\n    imagedestroy($src);\n    imagedestroy($dst);\n}\n\ncropCenterGD('photo.jpg', 'cropped.jpg', 200);\n?>
\n\n

2. Die Imagick-Bibliothek

\n\n

Imagick ist eine leistungsstarke Erweiterung, die eine objektorientierte Schnittstelle zu ImageMagick bietet. Sie unterstützt über 200 Formate, hervorragende Resampling-Qualität, Arbeit mit Farben, Filtern und Animationen. Sie muss auf dem Server installiert werden (nicht immer auf günstigem Hosting verfügbar).

Empfehlungen