Bildbearbeitung in PHP: GD und Imagick richtig einsetzen

Bildbearbeitung in PHP: GD und Imagick richtig einsetzen

In der Webentwicklung musst du regelmäßig Bilder bearbeiten: Avatare, Banner, Miniaturansichten oder was deine Website sonst noch anzeigen soll. PHP bringt dafür mehrere Bibliotheken mit, allen voran GD und Imagick. Dieser Artikel stellt die wichtigsten Funktionen beider Bibliotheken vor, mit Codebeispielen, die du direkt in deine PHP-Anwendung übernehmen kannst.

Die Bibliothek GD in PHP verwenden

GD ist eine PHP-Bibliothek zur Bildbearbeitung. Sie ist in den meisten PHP-Installationen von Haus aus enthalten, was den Einstieg leicht macht. GD unterstützt die folgenden Bildformate: JPG, PNG, GIF, BMP und WBMP.

Ein Bild mit GD laden und ausgeben

Um ein Bild mit GD zu laden, nimmst du die zum Bildtyp passende Funktion imagecreatefrom*() (jpg, png, gif und so weiter). Sie gibt eine GD-Ressource zurück, die das im Speicher gehaltene Bild darstellt. Anschließend gibst du das Bild mit header und der zum Format passenden Funktion image*() (imagejpeg, imagepng, imagegif und so fort) im Browser aus.

php
<?php
// Das Bild in eine GD-Ressource laden
$image = imagecreatefromjpeg('image.jpg');

// Das Bild ausgeben
header('Content-Type: image/jpeg');
imagejpeg($image);

Ein Bild mit GD skalieren

Zum Skalieren eines Bildes mit GD nimmst du die Funktion imagecopyresampled. Sie kopiert ein GD-Bild auf die angegebenen Zielmaße und interpoliert dabei, damit die Qualität des skalierten Bildes erhalten bleibt.

php
<?php
// Das Bild in eine GD-Ressource laden
$image = imagecreatefromjpeg('image.jpg');

// Das Bild skalieren
$image_resized = imagecreatetruecolor(200, 200);
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, 200, 200, imagesx($image), imagesy($image));

// Das skalierte Bild ausgeben
header('Content-Type: image/jpeg');
imagejpeg($image_resized);

Text auf ein Bild schreiben mit GD

Um Text auf ein GD-Bild zu schreiben, nimmst du die Funktion imagettftext. Sie fügt dem Bild Text hinzu, wobei du Schriftart, Größe, Winkel und Farbe des Textes angibst.

php
<?php
// Das Bild in eine GD-Ressource laden
$image = imagecreatefromjpeg('image.jpg');

// Text auf das Bild schreiben
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 30, $text_color, 'arial.ttf', 'Hello World !');

// Das Bild ausgeben
header('Content-Type: image/jpeg');
imagejpeg($image);

Die Bibliothek Imagick verwenden

Imagick ist eine weitere PHP-Bibliothek für die Bildverarbeitung. Sie kann mehr als GD: Ebenen und Masken, Formatkonvertierung, Kantenerkennung und Rauschunterdrückung. Imagick unterstützt sehr viele Bildformate, auch Vektorformate wie SVG.

Bevor du Imagick verwendest, musst du prüfen, ob die PHP-Erweiterung imagick auf deinem Server installiert und aktiviert ist. Das erledigt der folgende Befehl:

php
php -m | grep imagick

Taucht Imagick in der Liste der geladenen Erweiterungen auf, kannst du die Klassen und Methoden der Bibliothek in deinem PHP-Code benutzen. Andernfalls musst du die Erweiterung Imagick auf deinem Server erst installieren und aktivieren.

Ein Bild mit Imagick laden und ausgeben

Um ein Bild mit Imagick zu laden, erzeugst du ein Objekt der Klasse Imagick und übergibst den Pfad zum Bild. Dieses Objekt steht für das im Speicher gehaltene Bild, und über seine Methoden bearbeitest du es. Zur Ausgabe genügt ein echo auf das Imagick-Objekt.

php
<?php
// Das Bild in ein Imagick-Objekt laden
$imagick = new Imagick('image.jpg');

// Das Bild ausgeben
header('Content-Type: image/jpeg');
echo $imagick;

Ein Bild mit Imagick skalieren

Zum Skalieren eines Bildes mit Imagick nimmst du die Methode resizeImage des Imagick-Objekts. Sie skaliert das Bild auf die angegebenen Zielmaße und verwendet dabei einen Resampling-Filter, damit die Qualität des skalierten Bildes erhalten bleibt. Imagick bietet mehrere Resampling-Filter an, etwa FILTER_LANCZOS, FILTER_BOX oder FILTER_CUBIC.

php
<?php
// Das Bild in ein Imagick-Objekt laden
$imagick = new Imagick('image.jpg');

// Das Bild skalieren
$imagick->resizeImage(200, 200, Imagick::FILTER_LANCZOS, 1);

// Das skalierte Bild ausgeben
header('Content-Type: image/jpeg');
echo $imagick;

Text auf ein Bild schreiben mit Imagick

Um Text auf ein Bild zu schreiben, nimmst du die Methode annotateImage des Imagick-Objekts. Sie fügt dem Bild Text hinzu, wobei du Schriftart, Größe, Winkel und Farbe des Textes angibst.

php
<?php
// Das Bild in ein Imagick-Objekt laden
$imagick = new Imagick('image.jpg');

// Text auf das Bild schreiben
$draw = new ImagickDraw();
$draw->setFont('arial.ttf');
$draw->setFontSize(20);
$draw->setFillColor('black');
$imagick->annotateImage($draw, 10, 30, 0, 'Hello World !');

// Das Bild ausgeben
header('Content-Type: image/jpeg');
echo $imagick;

Fazit

Dieser Artikel hat die wichtigsten Funktionen der Bibliotheken GD und Imagick für die Bildverarbeitung in PHP vorgestellt. Du hast gesehen, wie du ein Bild lädst und ausgibst, wie du es skalierst und wie du Text darauf schreibst. Diese Codebeispiele kannst du direkt in deine PHP-Anwendung übernehmen. Sieh dir ruhig auch die übrigen Methoden und Optionen der beiden Bibliotheken an, um noch mehr aus der Bildverarbeitung in PHP herauszuholen.

PHP

Damien Flandrin Webentwickler seit 2010, Gründer von Gekkode und Email Impact. Jeder Artikel wird vor der Veröffentlichung an einem echten Projekt getestet. Kontakt
Newsletter

Neue Tests, Tutorials und Projekte, per E-Mail.

Reproduzierbare Tests, versionierter Code, datierte Ergebnisse. Niemals Spam.