Start · Sprachen · PHP · Referenz · Imagick

Imagick

Klasse

Objektorientierte Schnittstelle zur ImageMagick-Bibliothek; hält und bearbeitet mehrere Bilder gleichzeitig über einen internen Stack mit aktuellem Zeiger.

seit PHP 2.0.0 Kategorie: image

Signatur

class Imagick implements Iterator, Countable

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

Typ

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.';
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.';
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.';
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.