Bitte verwenden sie die "Drucken" Funktion am Seitenende, um ein PDF zu erstellen.
Für Webhosting, WordPress Hosting und Managed Dedicated Server
ImageMagick ist eine leistungsstarke Sammlung von Tools für die Kommandozeile zur serverseitigen Bildbearbeitung. Damit können Sie Aufgaben wie das Konvertieren, Skalieren oder Modifizieren von Bildern direkt auf Ihrem Webspace automatisieren. Das ist ideal für die Verarbeitung von Uploads in Content-Management-Systemen oder die dynamische Anpassung von Bildern durch Skripte.
In diesem Artikel zeigen wir Ihnen, wie Sie ImageMagick effektiv nutzen und die wichtige PDF-Unterstützung aktivieren.
Voraussetzungen
Um die Befehle ausführen 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:
Aufgabe: Ein Bild von JPG in das PNG-Format konvertieren
Mit diesem Befehl wandeln Sie beispiel.jpg in beispiel.png um:
convert beispiel.jpg beispiel.png
Aufgabe: Ein Bild konvertieren und die Größe auf 50 % reduzieren
Der Parameter -resize 50% skaliert das Bild auf die Hälfte seiner ursprünglichen Größe, bevor es als PNG gespeichert wird.
convert beispiel.jpg -resize 50% beispiel.png
Aufgabe: Ein Bild konvertieren und auf eine feste Breite oder Höhe skalieren
Dieser 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 beispiel.jpg beispiel.png
Hinweis
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! beispiel.jpg beispiel.png
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.
.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 FTP oder 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.