Für Webhosting, Hosting für WordPress und Managed Dedicated Server

ImageMagick ist eine leistungsstarke Sammlung von Tools für die Kommandozeile, mit denen sich Bilder serverseitig bearbeiten lassen. Damit können Sie Aufgaben wie das Konvertieren, Skalieren oder Modifizieren von Bildern direkt auf Ihrem Webspace automatisieren. Dies ist ideal für die Verarbeitung von Uploads in Content-Management-Systemen oder die dynamische Anpassung von Bildern durch Skripte.

In diesem Artikel stellen wir Ihnen die gängigsten Anwendungsfälle vor. Sie erfahren,

  • wie Sie grundlegende Bildbearbeitungen (Konvertieren, Skalieren) per SSH durchführen.

  • wie Sie die aus Sicherheitsgründen standardmäßig deaktivierte PDF-Unterstützung gezielt für Ihren Webspace freischalten.
  • wie Sie die PDF-Konvertierung sicher aus PHP-Skripten heraus ansteuern.

Voraussetzungen

Um die Befehle in diesem Artikel nutzen zu können, müssen Sie per SSH mit Ihrem Webspace verbunden sein.

Eine Anleitung, wie Sie eine SSH-Verbindung herstellen, finden Sie im Artikel SSH-Verbindung mit PuTTY (Windows) herstellen.

Grundlegende Bildbearbeitung per SSH

Das zentrale Werkzeug von ImageMagick ist derconvert-Befehl. Mit diesem Befehl können Sie Bilder direkt im Terminal bearbeiten.

Hier sind einige praktische Anwendungsbeispiele:
 

Bildformat konvertieren

Mit ImageMagick können Bilder in über 200 Formaten gelesen und geschrieben werden, darunter PNG, JPEG, JPEG 2000, GIF, TIFF, DPX, EXR, WebP, PostScript, PDF und SVG

Um ein Bild in ein anderes Format zu konvertieren, verwenden Sie den convert-Befehl nach dem Schema convert <Quelldatei> <Zieldatei>. In welches Format die Datei konvertiert wird, wird über die Dateiendung der Zieldatei festgelegt. 

Um beispielsweise das im JPEG-Format vorhandene Bild Blume.jpg in das PNG-Format zu kopieren, geben Sie den Befehl wie folgt ein:

convert Blume.jpg Blume.png


Umgekehrt (PNG → JPEG) funktioniert das auf dieselbe Weise:

convert Blume.png Blume.jpg

 

Bild skalieren (Auflösung ändern)

Sie können mit ImageMagick auch die Auflösung und somit die Größe eines Bildes ändern. Verwenden Sie dazu den Befehl convert zusammen mit dem Parameter resize. 

Um beispielsweise die Auflösung der Bilddatei Blume.png zu halbieren (50%), verwenden Sie folgenden Befehl:

convert -resize 50% Blume.png

Der folgende Befehl skaliert das Bild so, dass es in ein Rechteck von 480x95 Pixeln passt, wobei das ursprüngliche Seitenverhältnis erhalten bleibt. Das Ergebnis ist also maximal 480 Pixel breit und maximal 95 Pixel hoch.

convert -resize 480x95 Blume.png

Standardmäßig behält ImageMagick das Seitenverhältnis des Bildes bei, um Verzerrungen zu vermeiden. Wenn Sie das Bild jedoch exakt auf die Zielgröße zwingen möchten, auch wenn dies zu Verzerrungen führt, fügen Sie ein Ausrufezeichen (!) direkt hinter die Größenangabe an. 

convert -resize 480x95! Blume.png

Das Skalieren von Bildern ist auch direkt beim Konvertieren in ein anderes Format möglich. Hier ist ein Beispiel für die Kombination aus Formatkonvertierung (JPEG → PNG) und einer Skalierung um 50 %.

convert Blume.jpg -resize 50% Blume.png

 

 

Hinweis

Beachten Sie im Zusammenhang mit der Skalierung, dass hier die Auflösung in Pixeln und nicht die Anzeigegröße auf dem Bildschirm gemeint ist. 

Wenn Sie die Auflösung um 50 % reduzieren, dann wird aus einem Bild mit 1000 x 1000 Pixeln ein Bild mit 500 x 500 Pixeln. Anstelle von einer Million Pixeln haben Sie dann nur noch 250.000 Pixel, also ein Viertel der Pixel des Orginalbildes. Wenn Sie das Original mit der skalierten Version direkt nebeneinander auf dem Bildschirm vergleichen, belegt das skalierte Bild nur noch ein Viertel der Fläche des Originalbildes. Anders ausgedrückt: Das Originalbild ist in diesem Fall viermal so groß wie das skalierte Bild.

PDF-Unterstützung aktivieren

Aus Sicherheitsgründen ist die Verarbeitung von PDF-Dateien in der Standardkonfiguration von ImageMagick deaktiviert. Sie können diese Funktion jedoch gezielt für Ihren Webspace freischalten, indem Sie eine eigene Konfigurationsdatei anlegen:

  • Legen Sie im Hauptverzeichnis (/) Ihres Webspace das folgende Unterverzeichnis an. Sie können dies per FTP-Client oder direkt per SSH mit dem Befehl mkdir -p ~/.config/ImageMagick tun.

     mkdir -p ~/.config/ImageMagick

  • Erstellen Sie in diesem neuen Verzeichnis eine Datei mit dem Namen policy.xml. Per SSH können Sie hierfür z.B. den Editor nano verwenden:

    nano ~/.config/ImageMagick/policy.xml

  • Kopieren Sie den folgenden XML-Code vollständig in die policy.xml-Datei. Dieser Code überschreibt die Standardrichtlinien und erlaubt Lese- und Schreibzugriff für Formate wie PDF, PS und EPS.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policymap [
    <!ELEMENT policymap (policy)+>
    <!ATTLIST policymap xmlns CDATA #FIXED ''>
    <!ELEMENT policy EMPTY>
    <!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
    name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
    stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
    ]>
    <policymap>
       <policy domain="resource" name="memory" value="256MiB"/>
       <policy domain="resource" name="map" value="512MiB"/>
       <policy domain="resource" name="width" value="16KP"/>
       <policy domain="resource" name="height" value="16KP"/>
       <policy domain="resource" name="area" value="128MB"/>
       <policy domain="resource" name="disk" value="1GiB"/>
       <policy domain="resource" name="thread" value="2"/>
       <policy domain="delegate" rights="none" pattern="URL" />
       <policy domain="delegate" rights="none" pattern="HTTPS" />
       <policy domain="delegate" rights="none" pattern="HTTP" />
       <policy domain="path" rights="none" pattern="@*"/>
       <policy domain="coder" rights="read | write" pattern="{PS,PS2,PS3,EPS,XPS,PDF,PNG}" />
       <policy domain="module" rights="read | write" pattern="{PS,PS2,PS3,EPS,XPS,PDF,PNG}" />
    </policymap>

  •  Speichern Sie die policy.xml-Datei ab. Wenn Sie die Datei lokal erstellt haben, laden Sie sie per SFTP in das Verzeichnis .config/ImageMagick hoch.

Die PDF-Unterstützung für ImageMagick ist nun aktiv. Die Änderungen werden sofort wirksam.

PDF-Konvertierung in PHP-Skripten nutzen

Wenn Sie ImageMagick aus einem PHP-Skript heraus aufrufen möchten, um PDFs zu verarbeiten, ist ein zusätzlicher Schritt erforderlich. PHP-Skripte kennen standardmäßig nicht den Pfad zu Ihrer policy.xml-Datei. Sie müssen ihn über die Umgebungsvariable HOME bekannt machen.

Der absolute Pfad zu Ihrem Webspace-Verzeichnis (Document Root) wird benötigt. Wie Sie diesen ermitteln, erfahren Sie im Artikel Absoluten Pfad eines Webspace ermitteln (Document Root).

Das folgende PHP-Beispielskript zeigt, wie Sie die Umgebungsvariable setzen und anschließend eine PDF-Datei in eine JPG-Datei konvertieren.

<?php

// Ersetzen Sie diesen Pfad mit dem absoluten Pfad zu Ihrem Webspace-Verzeichnis.
$home_path = "/homepages/12/d123456789/htdocs";

// Setzt die HOME-Umgebungsvariable, damit ImageMagick die policy.xml findet.
putenv("HOME=" . $home_path);

// Definieren Sie den vollständigen Pfad zu den Dateien und dem convert-Tool.
$pdf_file = $home_path . "/dokument.pdf";
$jpg_file = $home_path . "/vorschau.jpg";
$convert_path = "/usr/bin/convert";

// Bauen Sie den Befehl zusammen und führen Sie ihn aus.
// Der Zusatz [0] sorgt dafür, dass nur die erste Seite des PDFs konvertiert wird.
$command = $convert_path . " " . escapeshellarg($pdf_file . "[0]") . " " . escapeshellarg($jpg_file);
$output = shell_exec($command);

// Optional: Ausgabe oder Fehler anzeigen (für Debugging)
if ($output) {
   echo "Fehlerausgabe: " . $output;
} else {
   echo "Konvertierung erfolgreich gestartet.";
}

?>

Achtung

Die Funktion shell_exec() führt Shell-Befehle direkt auf dem Server aus. Stellen Sie stets sicher, dass keine unbereinigten Benutzereingaben (z.B. Dateinamen aus einem Upload-Formular) direkt in den Befehl gelangen, um Sicherheitslücken wie Command Injection zu vermeiden. Verwenden Sie Funktionen wie escapeshellarg() zur Absicherung von Dateipfaden.