Signatur
Beschreibung
GmagickDraw ist eine Klasse der Gmagick-Erweiterung und stellt eine Zeichenfläche bereit, auf der 2D-Grafikoperationen definiert werden können. Sie kapselt einen internen Zeichenkontext, in dem Stileinstellungen wie Strichfarbe, Füllfarbe, Schriftart und Strichbreite festgelegt werden, bevor die eigentlichen Zeichenbefehle ausgeführt werden.
Typischer Einsatz: Zuerst wird ein GmagickDraw-Objekt erstellt, Stile und Geometrie werden konfiguriert (z. B. setFillColor, setStrokeColor, setFont), dann werden Zeichenoperationen wie rectangle(), ellipse() oder annotate() aufgerufen. Schließlich wird der fertige Zeichenkontext mit Gmagick::drawImage() auf ein Bild angewendet.
GmagickDraw ähnelt konzeptionell der ImagickDraw-Klasse aus der Imagick-Erweiterung, nutzt aber intern die GraphicsMagick-Bibliothek statt ImageMagick. Sie eignet sich besonders für Server-Umgebungen, auf denen GraphicsMagick installiert ist und Wasserzeichen, Beschriftungen oder einfache Vektorgrafiken dynamisch erzeugt werden sollen.
- Zeichenoperationen sind zustandsbasiert: gesetzte Stile gelten bis zur nächsten Änderung.
- Push/Pop-Methoden (
pushDrawingWand,popDrawingWand) ermöglichen verschachtelte Stileigenschaften.
Beispiele
Rechteck und Text auf ein Bild zeichnen
<?php
// Neues Bild erstellen
$gmagick = new Gmagick();
$gmagick->newImage(400, 200, new GmagickPixel('white'));
$gmagick->setImageFormat('png');
// Zeichenkontext vorbereiten
$draw = new GmagickDraw();
// Rechteck konfigurieren
$draw->setFillColor(new GmagickPixel('lightblue'));
$draw->setStrokeColor(new GmagickPixel('navy'));
$draw->setStrokeWidth(2);
$draw->rectangle(20, 20, 180, 100);
// Text konfigurieren
$draw->setFillColor(new GmagickPixel('black'));
$draw->setFontSize(24);
$draw->annotate(50, 160, 'Hallo Welt');
// Zeichenoperationen auf das Bild anwenden
$gmagick->drawImage($draw);
// Bild ausgeben
header('Content-Type: image/png');
echo $gmagick->getImageBlob();
Ellipse mit Farbverlaufs-Stil erzeugen
<?php
$gmagick = new Gmagick();
$gmagick->newImage(300, 300, new GmagickPixel('#f0f0f0'));
$gmagick->setImageFormat('jpeg');
$draw = new GmagickDraw();
// Kreis (Ellipse mit gleichen Radien)
$draw->setFillColor(new GmagickPixel('tomato'));
$draw->setStrokeColor(new GmagickPixel('darkred'));
$draw->setStrokeWidth(3);
// ellipse(ox, oy, rx, ry, start, end)
$draw->ellipse(150, 150, 100, 100, 0, 360);
// Mittelpunkt markieren
$draw->setFillColor(new GmagickPixel('white'));
$draw->ellipse(150, 150, 5, 5, 0, 360);
$gmagick->drawImage($draw);
header('Content-Type: image/jpeg');
echo $gmagick->getImageBlob();
// Wichtig · Fallstricke
Verfügbarkeit: GmagickDraw ist nur verfügbar, wenn die PHP-Erweiterung gmagick installiert und aktiviert ist (extension=gmagick in der php.ini). Auf vielen Systemen ist stattdessen imagick (ImageMagick) installiert — dort ist das Äquivalent ImagickDraw.
Zustandsbasierter Kontext: Stiländerungen (Farbe, Strichbreite, Schriftart) wirken auf alle nachfolgenden Zeichenoperationen. Bei komplexen Grafiken empfiehlt es sich, pushDrawingWand() und popDrawingWand() zu verwenden, um Stile lokal zu begrenzen.
Ressourcen: Wie bei allen Gmagick-Objekten sollten Instanzen nach der Verwendung freigegeben oder per unset() verworfen werden, um Speicherlecks zu vermeiden — insbesondere bei der Verarbeitung vieler Bilder in einer Schleife.