Signatur
Beschreibung
Imagick ist eine PECL-Erweiterung, die eine umfassende objektorientierte API zur ImageMagick-Bibliothek bereitstellt. Sie ermöglicht das Lesen, Erstellen, Transformieren, Konvertieren und Speichern von Bildern in über 100 Formaten – darunter JPEG, PNG, GIF, WebP, TIFF, SVG, PDF und viele mehr.
Intern verwaltet Imagick einen Bild-Stack (ähnlich einer Liste), über den mehrere Frames oder Seiten – etwa animierte GIFs oder mehrseitige PDFs – gleichzeitig gehalten werden können. Ein interner Zeiger navigiert zwischen diesen Frames; alle Iteratoroperationen arbeiten auf dem jeweils aktuellen Frame. Da die Klasse Iterator implementiert, kann man sie direkt in foreach-Schleifen verwenden.
Typische Anwendungsfälle sind: Thumbnails erzeugen, Wasserzeichen einbetten, Bilder zuschneiden und skalieren, Farbraum-Konvertierungen (z. B. RGB → CMYK), Bild-Compositing, Text-Rendering auf Bildern sowie das Manipulieren von Metadaten. Für komplexe Zeichenoperationen arbeitet Imagick eng mit der Hilfsklasse ImagickDraw zusammen.
Voraussetzung: Die PECL-Erweiterung imagick muss installiert und aktiviert sein (z. B. pecl install imagick). Auf den meisten Linux-Distributionen ist außerdem das Paket libmagickwand-dev erforderlich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $files | string|array | Optionaler Dateiname, URL oder Array von Dateinamen, die beim Instanziieren sofort geladen werden. Wird der Parameter weggelassen, ist das Objekt zunächst leer. Wildcards wie /pfad/*.png sind ebenfalls möglich. |
Rückgabewert
Beispiele
Bild laden, skalieren und als JPEG speichern
<?php
// Bild einlesen, auf max. 300×300 px verkleinern und speichern
$img = new Imagick('original.png');
// Seitenverhältnis beibehalten
$img->thumbnailImage(300, 300, true);
// Qualität 85 setzen und als JPEG ausgeben
$img->setImageFormat('jpeg');
$img->setImageCompressionQuality(85);
$img->writeImage('thumbnail.jpg');
$img->destroy(); // Speicher freigeben
echo 'Thumbnail gespeichert.';
Bild direkt an den Browser senden
<?php
$img = new Imagick('foto.jpg');
// Bild auf 800 px Breite skalieren (Höhe proportional)
$img->resizeImage(800, 0, Imagick::FILTER_LANCZOS, 1);
header('Content-Type: image/jpeg');
echo $img->getImageBlob();
$img->destroy();
Text als Wasserzeichen auf ein Bild zeichnen
<?php
$img = new Imagick('foto.jpg');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('rgba(255,255,255,0.6)'));
$draw->setFont('/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf');
$draw->setFontSize(36);
// Text unten rechts positionieren
$img->annotateImage($draw, 20, $img->getImageHeight() - 20, 0, '© Mein Fotoblog');
$img->writeImage('wasserzeichen.jpg');
$img->destroy();
echo 'Wasserzeichen eingefügt.';
Animiertes GIF frameweise iterieren
<?php
$gif = new Imagick('animation.gif');
foreach ($gif as $index => $frame) {
// Jeden Frame als PNG speichern
$frame->setImageFormat('png');
$frame->writeImage("frame_{$index}.png");
}
$gif->destroy();
echo 'Alle Frames exportiert.';
// Wichtig · Fallstricke
Speicherverwaltung: Jede Imagick-Instanz hält Bilddaten im PHP-Prozess-Speicher. Bei großen Bildern oder Stapelverarbeitung sollte $img->destroy() oder unset($img) explizit aufgerufen werden, um den Speicher zeitnah freizugeben.
Sicherheit: Lesen Sie niemals unkontrollierte Benutzer-Uploads direkt mit new Imagick($_FILES['file']['tmp_name']), ohne den MIME-Typ zuvor zu prüfen. ImageMagick interpretiert viele Formate (inkl. SVG, PDF, MVG) und war in der Vergangenheit Ziel von Exploits wie ImageTragick. Konfigurieren Sie /etc/ImageMagick-*/policy.xml restriktiv und deaktivieren Sie nicht benötigte Decoder.
Kompatibilität: Die verfügbaren Methoden hängen stark von der installierten ImageMagick-Version ab. Überprüfen Sie mit Imagick::getVersion(), welche Version vorliegt. Einige Methoden wurden in neueren Versionen umbenannt oder entfernt.
Alternative GD: Für einfache Operationen (Skalieren, Zuschneiden) reicht oft die eingebaute GD-Erweiterung. Imagick lohnt sich bei komplexen Transformationen, speziellen Formaten oder professioneller Farbraum-Behandlung.