Wasserzeichen für Bilder mittels Imagemagick und exifv2 erstellen

Viele meiner Fotos sind derzeit ohne Wasserzeichen, da ich das in den Bildern immer als störend empfand. Heute ist mir jedoch bei den eingehenden Links aufgefallen, dass sehr viele Anfragen auf ein einziges Bild liefen. Der Aufruf der Seite ergab, dass jemand einen Sonnenuntergang als den seinen (also ohne Quellenangabe) ausgegeben hatte. Dumm gelaufen, jetzt steht dort eben, dass der jenige ein Dieb ist und die richtige Adresse des Sonnenuntergangs. Da ich Hotlinking aber nicht ganz abstellen wollte, nun ein kleiner Trick, der die Fotos mal zumindest markiert: Wasserzeichen.

Werbung


Meine Wasserzeichen habe ich nun mit Imagemagick erstellt, da dies auf der Kommandozeile von Linux verfügbar und sogar auch per PHP ansteuerbar ist. Da ich aber kein überdeutliches Wasserzeichen (wie bei Sven zu sehen) verwenden wollte, sondern nur ein dezentes, war die Erstellung etwas komplizierter.
Zunächst muss ein Stempel erzeugt werden, der die gewünschten Worte („©2008 wolf-u.li“) enthält:

#!/bin/sh
convert -size 150x25 xc:grey30 -font Arial -pointsize 10 -gravity center -draw "fill grey70  text 0,0  '© 2008 wolf-u.li'" stempelvordergrund.png
convert -size 150x25 xc:black -font Arial -pointsize 10 -gravity center -draw "fill white  text  1,1  '©2008 wolf-u.li' text  0,0  '©2008 wolf-u.li' fill black text -1,-1 '©2008 wolf-u.li'" +matte stempelmaske.png
composite -compose CopyOpacity  stempelmaske.png  stempelvordergrund.png  stamp.png
mogrify -trim +repage stamp.png

Hinweis: Klicke auf „Plain Text“ zum einfacheren Kopieren 🙂

Schlussendlich entsteht dabei eine Datei namens stamp.png, die den endgültigen „Stempel“ enthält. Sieht dann etwa aus wie rechts zu sehen.

Diese Datei wird nun auf ein Bild namens pic.jpg wie folgt angewandt:

#!/bin/sh
composite -gravity SouthEast -geometry +10+10 stamp.png  pic.jpg pic.stamped.jpg

Zum Befehl: gravity gibt die Ecke an wie auf einem Kompass (SouthEast = rechts unten) und geometry gibt an, wieviel Abstand zum Rand sein soll. Für weitere Details dazu würde ich einfach im Manual nachlesen.

Die neue Datei pic.stamped.jpg enthält in der Ecke rechts unten nun ein halbtransparentes Wasserzeichen.

Das ganze kann man ein wenig automatisieren. Speichere dies in eine Bash-Datei:

#!/bin/sh
composite -gravity SouthEast -geometry +10+10 stamp.png  $1 $1

Wenn man diese nun mit dem Dateinamen als Argument aufruft, wird das Wasserzeichen erstellt und das Bild wieder in die gleiche Datei gespeichert. (z.B.: „stampme.sh pic.jpg“).

Gleichzeitig packe ich nun auch einen EXIF-Comment in alle Dateien:

exiv2 -M"set Exif.Photo.UserComment charset=Ascii Copyright 2008 by Ulrich Wolf - Visit https://wolf-u.li" $1

Anscheinend können EXIF-Daten verloren gehen, aber auch hierfür gibts eine Lösung. Mittels exiv2 werden die EXIF-Daten vor dem Erstellen des Wasserzeichens exportiert und abschließend wieder importiert. Der Blogger Melle hat hierfür ein Skript gebastelt, das ich für meine Bedürfnisse zugeschnitten habe. Zum einen sollte die Datei nur das Wasserzeichen erhalten, nicht jedoch „umgespeichert“ werden

#!/bin/sh
# Script for stamping a watermark by wolf-u.li
#
for FILE in $*
do
  echo processing $FILE
  BASENAME=`echo $FILE | sed 's/\(.*\)\.[jJ][pP][gG]/\\1/g'`
  # backup metadata from file
  /usr/bin/exiv2 -v ex $FILE
  # apply watermark
  composite -gravity SouthEast -geometry +10+10 /home/uli/stamp.png  $FILE $FILE
  # restore metadata
  /usr/bin/exiv2 -v in $FILE
  rm $BASENAME.exv
  /usr/bin/exiv2 -M"set Exif.Photo.UserComment charset=Ascii Copyright 2008 by Ulrich Wolf - Visit https://wolf-u.li" $FILE
done

Hinweis: Klicke auf „Plain Text“ zum einfacheren Kopieren 🙂

Zum Schluss ein „Vorher/Nachher“-Vergleich (wobei ich das vermutlich auf die Thumbnails nicht anwenden werde):

VorherNachher

Veröffentlicht von

Uli

IT-Nerd und Admin

2 Gedanken zu „Wasserzeichen für Bilder mittels Imagemagick und exifv2 erstellen“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.