Skip to main content
  1. Posts/

Wassermarken mittels Imagemagick

·780 words·4 mins· loading · loading · ·
Deutsch Linux ImageMagick Bash
rOger Eisenecher
Author ::..
rOger Eisenecher
> 12 years leading and building a SOC for MSSP • > 20 years working in security • > 40 years working with IT • 100% tech nerd.
Table of Contents

Für das Abbilden von PDFs als Bilder auf einer Webpage und zum Sicherstellen, dass der Ursprung der PDFs bzw. der Bilder ersichtlich bleibt auch wenn die Bilder mal kopiert werden, habe ich nach einer Lösung gesucht, die automatisch PDFs in Bilder konvertiert und Wasserzeichen anbringt. Dieser Artikel beschreibt das Vorgehen.

Grundlagen

Der folgende Artikel beschreibt das automatisierte Bearbeiten von PDFs und Konvertierung in PNGs mithilfe von ImageMagick. Als Basis dient die aktuelle Version 7 von ImageMagick. Weiter benutze ich Linux als Plattform - auf anderen können die Kommando’s etwas anders aussehen.

Das Vorgehen sieht in etwa wie folgt aus:

  • Konvertieren des PDFs nach PNG
  • Entfernen des transparenten Bereichs rund um den Inhalt des PDFs
  • Bilder zusammenhängen (vertikal)
  • Wassermarke erstellen
  • Wassermarke auf das bestehende Bild legen

Die jeweiligen Schritte werden in den folgenden Abschnitten beschrieben.

Konvertieren des PDFs nach PNG

Das Konvertieren von PDF in ein Grafik-Format mittels ImageMagick ist einfach:

convert -density 150 Quelldatei.pdf -quality 100 Zieldatei.png

Dabei gibt der Parameter -density die gewünschte “Pixeldichte” des Zielbildes an (hier 150 dpi). Mit dem Parameter -quality wird definiert, wie hoch die Qualität in Prozent für das Zielbild sein soll. Mit 100 definiert dass keine Kompression zum Einsatz kommt - mit Werten unter 100 wird das Bild entsprechend komprimiert.

Bei mehrseitigen PDFs werden mit diesem Kommando mehrere Ausgabe-Bilder erstellt. Ohne weiteren Parameter hängt ImageMagick an die Datei einen Zähler. Die resultierenden Dateien für das obige Beispiel bei einem zweiseitigen PDF würde dann Zieldatei-0.png und Zieldatei-1.png lauten.

Entfernen des transparenten Bereichs rund um den Inhalt des PDFs

Die oben aufgeführte Konvertierung führt dazu, dass der umgebende Rand ebenfalls als Grafik konvertiert wird - allerdings typischerweise transparent. Wollen wir im Anschluss die konvertierten Grafiken aneinander hängen, ergeben sich “unschöne” Abstände zwischen den Inhalten. Kann gewünscht sein - in meinem Fall aber nicht. Daher kommt folgende Zeile zum entfernen der transparenten Teile zum Einsatz:

mogrify -trim +repage Zieldatei.png

Hier ist der Parameter -trim der Schlüssel - damit wird der transparente Teil quasi entfernt.

Bilder zusammenhängen (vertikal)

Der nächste Schritt besteht darin, die einzelnen Grafiken zusammen zu hängen (untereinander). Dies erreichen wir mit dem folgenden Kommando:

convert Zieldatei-*.png -background transparent -gravity South -append Zieldatei.png

Der Parameter -background definiert den gewünschten Hintergrund beim Zusammenfügen der Bilder. In diesem konkreten Fall ist er Transparent.

Wassermarke erstellen

Für mich ist die Unabhängigkeit von weiteren Dateien wichtig - insbesondere der Verzicht auf ein Wasserzeichen in Form einer dedizierten Grafik. Falls man eine dedizierte Grafik nutzen möchte, kann diesen Schritt überspringen.

convert -size 200x100 -background None -font Palatino-Roman -fill 'lightblue' label:https://blog.sekureco42.ch +clone -channel RGB -negate +channel -repage -2-2 -layers merge -channel A -evaluate Multiply 0.15 +channel -trim +repage -rotate 15 watermark.png

Hier die wichtigsten Punkte:

  • -size 200x100: Definiert die Grösse des Wasserzeichen
  • -font Palatino-Roman: Definiert den zu benutzenden Zeichensatz. Mittels convert -list font kann man sich die Liste der vorhandenen Zeichensätze auflisten lassen.
  • -fill 'lightblue': Gibt die zu verwendende Farbe für den Text des Wasserzeichens an.
  • label:https://blog.sekureco42.ch definiert den Text für das Wasserzeichen.
  • -evaluate Multiply 0.15: Damit wird das Wasserzeichen über den Alpha-Kanal (-channel A) auf 0.15 gesetzt (Teil-Transparent).
  • -rotate 15: Damit wird der Text um 15° gedreht.
  • watermark.png: Dateiname für das Wasserzeichen.

Wassermarke auf das bestehende Bild legen

Der letzte Schritt besteht darin, das Wasserzeichen auf das zuvor generierte Bild zu legen. Dies geschieht wie folgt:

composite -tile -gravity center watermark.png Zielbild.png Zielbild-wm.png

Mittels -tile wird angegeben, dass man das Wasserzeichen mehrfach auf dem Zielbild haben möchte. Der Parameter -gravity center definiert die Positionierung.

Das resultierende Skript

#!/bin/bash

# Script to convert PDF to PNG

FILE=$1
FILE_NOEXT=${FILE%.*}

if [ -z "$FILE" ]; then
    echo "ERROR: Please specify an PDF document!"
    exit 1
fi

if [ -f "$FILE_NOEXT.png" ]; then
    echo "INFO: Found already generated image - deleting it."
    rm -f "$FILE_NOEXT.png"
fi

if [ -f "$FILE_NOEXT-wm.png" ]; then
    echo "INFO: Found already generated image with watermark - deleting it."
    rm -f "$FILE_NOEXT-wm.png"
fi

# First we have to create seperate PNG from each PDF page
convert -density 150 $FILE -quality 100 $FILE_NOEXT.png

# Trim each PNG (remove border)
mogrify -trim +repage $FILE_NOEXT*.png

# Stitch all PNG images to one large image
convert $FILE_NOEXT*.png -background transparent -gravity South -append $FILE_NOEXT.png

# Cleanup intermediate PNG files
rm -f $FILE_NOEXT-*.png

# Create Watermark
convert -size 200x100 -background None -font Palatino-Roman -fill 'lightblue' label:https://e-mobility.icer.ch +clone -channel RGB -negate +channel -repage -2-2 -layers merge -channel A -evaluate Multiply 0.15 +channel -trim +repage -rotate 15 watermark.png

# Overlay destination image with watermark images
composite -tile -gravity center watermark.png $FILE_NOEXT.png $FILE_NOEXT-wm.png

Das Skript wird dann typischerweise so aufgerufen:

./makePNGfromPDF.sh Quelldatei.pdf

Das Ergebnis sind folgende Dateien:

  • watermark.png - Das Wasserzeichen als Datei.
  • Quelldatei.png - PDF nach PNG konvertiert ohne Wasserzeichen.
  • Quelldatei-wm.png - PDF nach PNG konvertiert mit Wasserzeichen.