Start · Sprachen · PHP · Referenz · Gmagick

Gmagick

Klasse

Bietet eine objektorientierte Schnittstelle zur GraphicsMagick-Bibliothek für die Bildverarbeitung in PHP.

seit PHP 0.1.0 Kategorie: image

Signatur

class Gmagick

Beschreibung

Gmagick ist eine PHP-Erweiterung, die eine objektorientierte Schnittstelle zur GraphicsMagick-Bibliothek bereitstellt. Damit lassen sich Bilder in zahlreichen Formaten (JPEG, PNG, GIF, TIFF, WebP u. v. m.) lesen, erstellen, transformieren und speichern. Typische Anwendungsfälle sind das Skalieren von Bildern, das Hinzufügen von Wasserzeichen, Formatkonvertierungen sowie das Zeichnen von Grafiken und Text auf Bilder.

Im Unterschied zur verwandten Imagick-Klasse (ImageMagick) setzt Gmagick auf GraphicsMagick, das häufig als ressourcenschonender und bei vielen Batch-Operationen performanter gilt. Für Projekte mit hohem Bilddurchsatz kann dies ein entscheidender Vorteil sein.

Die Klasse unterstützt das Laden von Bilddateien über den Konstruktor oder die Methode readimage(), bietet umfangreiche Methoden zur Bildmanipulation wie resizeimage(), cropimage(), rotateimage(), addimage() sowie die Möglichkeit, mit GmagickDraw komplexe Zeichenoperationen durchzuführen. Ressourcen werden über destroy() oder den Destruktor freigegeben.

Die Erweiterung muss separat installiert werden (PECL: gmagick) und setzt eine installierte GraphicsMagick-Bibliothek voraus. Vor dem Einsatz sollte mit extension_loaded('gmagick') geprüft werden, ob die Erweiterung verfügbar ist.

Parameter

Name Typ Default Beschreibung
$filename string Optionaler Pfad zu einer Bilddatei, die beim Erstellen des Objekts sofort geladen werden soll. Wird kein Pfad angegeben, wird ein leeres Gmagick-Objekt erzeugt, dem später Bilder hinzugefügt werden können.

Rückgabewert

Typ

Beispiele

Bild laden, skalieren und als JPEG speichern

<?php
// Gmagick-Objekt mit vorhandenem Bild erstellen
$image = new Gmagick('/var/www/uploads/foto.png');

// Bild auf 800x600 Pixel skalieren (Seitenverhältnis ignorieren)
$image->resizeimage(800, 600, Gmagick::FILTER_LANCZOS, 1);

// Kompressionsqualität auf 85 % setzen
$image->setimagecompressionquality(85);

// Als JPEG-Datei speichern
$image->writeimage('/var/www/uploads/foto_skaliert.jpg');

// Ressource freigeben
$image->destroy();

echo 'Bild erfolgreich skaliert und gespeichert.';
Bild erfolgreich skaliert und gespeichert.

Wasserzeichen-Text auf ein Bild zeichnen

<?php
// Bild laden
$image = new Gmagick('/var/www/uploads/landschaft.jpg');

// Zeichenobjekt erstellen
$draw = new GmagickDraw();
$draw->setfont('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf');
$draw->setfontsize(36);
$draw->setfillcolor(new GmagickPixel('rgba(255,255,255,0.7)'));

// Text auf das Bild zeichnen
$image->annotateimage($draw, 30, 50, 0, '© MeinWebsite.de');

// Ergebnis ausgeben
header('Content-Type: image/jpeg');
echo $image->getimageblob();

$image->destroy();

Bild zuschneiden (Crop) und als PNG ausgeben

<?php
$image = new Gmagick('/var/www/uploads/banner.jpg');

// Mittleren Bereich 400x300 Pixel ab Position (100, 50) ausschneiden
$image->cropimage(400, 300, 100, 50);

// Format auf PNG setzen
$image->setimageformat('PNG');

// Direkt an den Browser senden
header('Content-Type: image/png');
echo $image->getimageblob();

$image->destroy();

// Wichtig · Fallstricke

Installation: Die gmagick-Erweiterung ist nicht im PHP-Kern enthalten und muss über PECL installiert werden (pecl install gmagick). Zusätzlich muss die GraphicsMagick-Entwicklerbibliothek (libgraphicsmagick1-dev o. Ä.) auf dem System vorhanden sein.

Sicherheit: Beim Verarbeiten von benutzerseitig hochgeladenen Dateien sollte der Dateityp nicht anhand der Dateiendung geprüft werden. Verwende stattdessen getimageblob() nach dem Laden oder prüfe den MIME-Typ sicher mit finfo. Bildverarbeitungsbibliotheken können anfällig für Angriffe über manipulierte Bilddateien (z. B. ImageTragick) sein — halte GraphicsMagick stets aktuell.

Speicherverwaltung: Bei der Verarbeitung vieler oder großer Bilder sollte destroy() explizit aufgerufen werden, um den Speicher zeitnah freizugeben und nicht auf den Garbage Collector zu warten.

Kompatibilität: Gmagick und Imagick bieten eine ähnliche API, sind aber nicht kompatibel. Viele Methoden haben denselben Namen, können sich jedoch im Verhalten oder bei Konstanten unterscheiden.