{"id":551,"date":"2013-05-26T12:08:30","date_gmt":"2013-05-26T11:08:30","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=551"},"modified":"2017-12-15T22:33:58","modified_gmt":"2017-12-15T21:33:58","slug":"bildbearbeitung-in-der-kommandozeile","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/bildbearbeitung-in-der-kommandozeile\/","title":{"rendered":"Bildbearbeitung in der Kommandozeile"},"content":{"rendered":"<p>Auf Ausfl\u00fcgen und im Urlaub begleitet mich neben meiner Freundin meist auch meine kleine Canon IXUS, um die sch\u00f6nsten Urlaubsbilder festhalten zu k\u00f6nnen. Die Fotos mache ich meist mit der h\u00f6chsten Aufl\u00f6sung. Falls ich sp\u00e4ter ein Bild in Postergr\u00f6\u00dfe drucken lassen m\u00f6chte habe ich so keine Probleme wegen einer zu geringen Aufl\u00f6sung. Jedoch belegen Bilder in Hoher Aufl\u00f6sung schnell 3-4MB pro Bild was die SSD bei vielen Bildern sehr schnell f\u00fcllt.<\/p>\n<p>Zu den regelm\u00e4\u00dfigen Aufgaben nach dem Urlaub geh\u00f6rt daher das Bilder durchsehen und verkleinern. Denn zum Zeigen auf den Notebook oder Tablet reicht meist auch eine wesentlich kleinere Aufl\u00f6sung und man spart jede Menge Speicherplatz ein.<\/p>\n<p>Das Verkleinern der Bilder erledige ich schnell und einfach auf der Kommandozeile. Dazu habe ich mir folgendes Skript erstellt, dem ich beim Aufruf die gew\u00fcnschte Aufl\u00f6sung mitgebe und schon wandelt es alle Bilder im angegebenen Verzeichnis um. Dabei werden keine neuen Dateien angelegt, sondern die vorhandenen bearbeitet. Daher sollte man sicher sein welche Aufl\u00f6sung man will.<\/p>\n<p><code>#!\/bin\/bash<br \/>\n# Bildgroesse reduzieren und Seitenverhaeltnis beibehalten<br \/>\n# Die gewuenschte Aufloesung wird abgefragt<br \/>\n# Author: Joerg Kastning<br \/>\n# Lizenz: GPLv3<br \/>\n# Programmbeginn<br \/>\nread -p \"Bitte die gew\u00fcnschte Aufl\u00f6sung eingeben (z.B. 1600): \" aufloesung<br \/>\nls -1 *.JPG *.jpg | while read file;<br \/>\ndo {<br \/>\nmogrify -resize \"$aufloesung\"x\"$aufloesung\" \"$file\"<br \/>\necho \"Bild $file wird verkleinert.\"<br \/>\n}<br \/>\ndone<br \/>\necho \"Die Bearbeitung ist beendet.\"<br \/>\nexit<\/code><\/p>\n<p>M\u00f6chte man seine Bilder nun noch ins Web hochladen, um sie mit Freunden zu teilen kann man den Bildern ein Wasserzeichen hinzuf\u00fcgen. Wasserzeichen sch\u00fctzen eure Bilder davor, dass andere sie als ihren eigenen Schnappschuss ausgeben. Denn sind eure Bilder erstmal im Netz kann sie dort so gut wie jeder finden und kopieren. Beim hinzuf\u00fcgen der Wasserzeichen hilft das folgende Skript welches ich im <a title=\"Wiki Ubuntuusers ImageMagick\" href=\"http:\/\/wiki.ubuntuusers.de\/ImageMagick#Bilder-mit-Wasserzeichen-versehen\" target=\"_blank\">Wiki<\/a> von <a title=\"Ubuntuusers\" href=\"http:\/\/www.ubuntuusers.de\/\" target=\"_blank\">Ubuntuusers<\/a> gefunden habe.<\/p>\n<p><code>#!\/bin\/bash<br \/>\n# Wasserzeichentext in alle JPEG Bilder aus diesen Verzeichnis einfuegen<br \/>\n# Der Wasserzeichentext wird unten links ins Bild eingebracht<br \/>\n# Sie koennen folgende Parameter anpassen:<br \/>\nTextabstandvonlinks=10<br \/>\nTextabstandvonunten=10<br \/>\nSchriftgroesse=10<br \/>\nPfadFonts=\"\/usr\/share\/fonts\/truetype\/msttcorefonts\"<br \/>\n# Pfad ist je nach Distribution unterschiedlich!<br \/>\nSchriftart=\"Arial.ttf\"<br \/>\nSchriftfarbe=\"white\"<br \/>\n# Moegliche Farben koennen aufgelistet werden mit dem Befehl: convert -list color<br \/>\nWasserzeichentext=\"Copyright Joerg Kastning\"<br \/>\n# Programmbeginn<br \/>\necho \"Textabstand von links: $Textabstandvonlinks\"<br \/>\necho \"Textabstand von unten: $Textabstandvonunten\"<br \/>\necho \"Schriftgoesse: $Schriftgroesse\"<br \/>\necho \"Schriftart: $Schriftart\"<br \/>\necho \"Schriftfarbe: $Schriftfarbe\"<br \/>\necho \"Wasserzeichentext: $Wasserzeichentext\"<br \/>\necho \" \"<br \/>\nls -1 *.JPG *.jpg | while read file;<br \/>\ndo {<br \/>\nhorizontal=`identify -verbose $file | grep Geometry: | awk {'print $2'} |cut -d\"x\" -f 1`<br \/>\nvertikal=`identify -verbose $file | grep Geometry: | awk {'print $2'} |cut -d\"x\" -f 2`<br \/>\nX=$Textabstandvonlinks<br \/>\nY=$(($vertikal - $Textabstandvonunten))<br \/>\nconvert<br \/>\n-font $PfadFonts\/$Schriftart -pointsize $Schriftgroesse -fill<br \/>\n$Schriftfarbe -draw \"text $X, $Y '$Wasserzeichentext'\" \"$file\"<br \/>\n\"`basename Wasserzeichen_\"$file\"`\";<br \/>\necho \"Bearbeite Datei $file\"<br \/>\n}<br \/>\ndone<br \/>\necho \"Wasserzeichen wurden erfolgreich eingearbeitet\"<br \/>\nexit<br \/>\n# Programmende<br \/>\n<\/code><\/p>\n<p>Diese beiden Skripts machen aus der Skalierung und dem Hinzuf\u00fcgen von Wasserzeichen ein Kinderspiel. So macht Bildbearbeitung in der Kommandozeile Spa\u00df.<\/p>\n<h2>Erg\u00e4nzung vom 15.12.2017<\/h2>\n<p>Beim Aufr\u00e4umen und Sortieren meiner Bilder entstand eine neue Anforderung, die ich mit den beiden bisherigen Skripten nicht abdecken konnte. Datum und Uhrzeit der Aufnahme, sollten aus den <a href=\"https:\/\/de.wikipedia.org\/wiki\/Exchangeable_Image_File_Format\" rel=\"noopener\" target=\"_blank\">EXIF-Informationen<\/a> extrahiert und in den Dateinamen kodiert werden. Diese Aufgabe werde ich fortan mit folgendem Python-Skript erledigen:<\/p>\n<pre>\r\n#!\/usr\/bin\/env python3\r\n# -*- encoding: utf-8 -*-\r\n#\r\n# Beschreibung:\r\n# Dieses Skript dient der Verarbeitung von JPEG-Dateien. Es wertet das\r\n# Attribut 'EXIF DateTimeOriginal' aus und benennt die verbeiteten Dateien\r\n# um, so dass diese dem Muster '<YYYY-MM-DD>_img.jpg' entsprechen.\r\n#\r\n# Autor:    Tronde (https:\/\/ubuntuusers.de\/user\/Tronde\/)\r\n# Lizenz:   GPLv3 (http:\/\/www.gnu.de\/documents\/gpl.de.html)\r\n\r\nimport os\r\nimport exifread\r\nimport argparse\r\n\r\ndef main():\r\n    parser = argparse.ArgumentParser(description=\"Dieses Skript dient der Verarbeitung von JPEG-Dateien. Es wertet das Attribut 'EXIF DateTimeOriginal' aus und benennt die verbeiteten Dateien um, so dass diese dem Muster <YYYY-MM-DD_img_NUMBER> entsprechen.\")\r\n    parser.add_argument(\"-s\", \"--source-dir\", required=False, default='.', dest=\"src\", help=\"Quell-Verzeichnis mit den zu verarbeitenden JPEG-Dateien.\")\r\n\r\n    args = parser.parse_args()\r\n    \r\n    src = args.src\r\n\r\n    os.chdir(src)\r\n    for file in os.listdir(src):\r\n        if file.endswith(\".jpg\") or file.endswith(\".JPG\"):\r\n            f = open(file, 'rb')\r\n            tags = exifread.process_file(f, details=False, stop_tag='EXIF DateTimeOriginal')\r\n            str_DateTime = str(tags['EXIF DateTimeOriginal']).split()\r\n            str_Date = str(str_DateTime[0]).split(':')\r\n            str_Time = str(str_DateTime[1]).split(':')\r\n            Date = str_Date[0] + \"-\" + str_Date[1] + \"-\" + str_Date[2]\r\n            Time = str_Time[0] + str_Time[1] + str_Time[2]\r\n            fname = Date + \"T\" + Time + \"_img.jpg\"\r\n#            print(fname)\r\n            os.rename(file,fname)\r\n\r\nif __name__ == \"__main__\":\r\nmain()\r\n<\/pre>\n<p>Das obige Skript<\/p>\n<ol>\n<li>liest alle JPG-Dateien eines Verzeichnisses ein,<\/li>\n<li>wertet die EXIF-Informationen aus und<\/li>\n<li>benennt die verbeiteten Dateien um, so dass diese dem Muster &#8218;<YYYY-MM-DD>_img.jpg&#8216; entsprechen.<\/li>\n<\/ol>\n<p>Alles Skripte finden sich auch auf GitHub im Repository: <a href=\"https:\/\/github.com\/Tronde\/Bildbearbeitung\">https:\/\/github.com\/Tronde\/Bildbearbeitung<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auf Ausfl\u00fcgen und im Urlaub begleitet mich neben meiner Freundin meist auch meine kleine Canon IXUS, um die sch\u00f6nsten Urlaubsbilder festhalten zu k\u00f6nnen. Die Fotos mache ich meist mit der h\u00f6chsten Aufl\u00f6sung. Falls ich sp\u00e4ter ein Bild in Postergr\u00f6\u00dfe drucken lassen m\u00f6chte habe ich so keine Probleme wegen einer zu geringen Aufl\u00f6sung. Jedoch belegen Bilder<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/bildbearbeitung-in-der-kommandozeile\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[175,176,177,58,60],"class_list":["post-551","post","type-post","status-publish","format-standard","hentry","category-linux","tag-bash","tag-bildbearbeitung","tag-imagemagick","tag-linux","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=551"}],"version-history":[{"count":4,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/551\/revisions"}],"predecessor-version":[{"id":1931,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/551\/revisions\/1931"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}