"Iimage - Bildbearbeitung auf der Konsole" 15:15h Raum201 Sven Guckes Latest change: Mon Mar 20 07:17:27 CET 2006 ------------------------------------------- 5. Linux-Infotag an der FH Augsburg, Sa, 25. März 10-16h Fachbereich Informatik http://www.luga.de/Aktionen/LIT-2006/index_html/#a5 diese datei: http://www.guckes.net/augsburg2006/bildbearbeitung_auf_der_console.txt === Abstract Für die Bearbeitung von einzelnen Bildern nimmt man die Maus. Aber für die Bearbeitung von vielen Bildern kann man auch Tools nehmen, die über die Shell (Kommandozeile, Konsole, Terminals) bedienbar sind. Das ist oftmals gar nicht so schwer - und die Maus lebt länger. /* Die Bearbeitung von Bildern ist aufwändig - besonders wenn man eine ganze Menge von Bildern behandeln möchte. Einzelnes Klicken führt dann schnell zum Maustod. */ Vor allem kann man die Bearbeitung von vielen Bildern mit TextTools automatisieren. Und das ist angenehm. Ich zeige kurz iimage (weil es so schoen einfach ist :-) und noch ein paar andere hilfreiche Tools: file, iimage, jhead, jpegtran, ImageMagick (convert identify mogrify).. (vielleicht auch noch asciicam, exiftran und mplayer) === file "file" testet jedes Argument und macht drei Durchgänge, um es zu klassifizieren: Dateisystem, Magic Number, und Sprache. Mit file kann man also den Dateityp rausfinden. $ file * | less $ file * > file.txt $ file foo.gif foo:gif: JPEG image data, JFIF standard 1.01 soso.. ;) achtung: fbview verlaesst sich auf die dateiendung und scaliert alles per default auf 640x480. :-/ === Iimage Iimage produziert aus einem Verzeichnis mit Filmen (avi, mov) und Bildern (gif, jpeg, png) eine Übersicht in zwei Stufen von thumbnails. Per JavaScript kann man die Zwischenstufe auch als Slideshow ansehen. Über eine Datei "descriptions" kann man die Bilder und Filme in der Übersicht auch beschriften. Iimage ist ein einziges Shell Script, ca 60KB gross. Es ist direkt lauffähig, dh man braucht es weder zu entpacken noch zu installieren. Es enthält zu ca 15KB codierte images - ein icon fuer Verzeichnisse und ein icon für Dateiformate (avi, mov, snd). Es benutzt die folgenden Programme: (standard) awk basename cat cp cut date echo find grep mkdir mv rm uname (special) convert identify jpegtran metacam mplayer iimage runterladen: $ wget http://www.ronsc.de/iimage/devel/iimage ausführbar machen: $ chmod 755 iimage ins eigene "bin" verzeichnis packen (welches natürlich auch im $PATH sein sollte): $ mv iimage ~/bin Eventuell vor der Benutzung die Dateimaske ändern (zB falls die Bilder auf dem Webserver sind): $ umask 022 Thumbnails und Index generieren: $ iimage ja, - das war's schon. :) Zeitspanne der Bearbeitung messen: $ time iimage Achtung: Die Dateinamen sollte keine Leerzeichen enthalten. "export LANG=en_EN"! neue version? iimage ersetzt sich selbst: $ iimage -D Datei "description" anlegen: $ iimage -d Iimage http://www.ronsc.de/iimage/iimage update: iimage -D maillist: iimage(at)ronsc.de newsgroup: gmane.comp.web.iimage Maintainer: Ronald Schmidt -> http://guckes.net/pics.2006.03-04/.tmp/img_4644.jpg.html === jhead jhead is a command line driven utility for extracting digital camera settings from the Exif format files used by many digital cameras. It handles the various confusing ways these can be expressed, and displays them as F-stop, shutter speed, etc. It is also able to reduce the size of digital camera JPEGs without loss of information, by deleting integral thumbnails that digital cameras put into the Exif header. $ jhead img_4717.jpg File name : img_4717.jpg File size : 13735 bytes File date : 2006:03:07 20:03:28 Camera make : Canon Camera model : Canon DIGITAL IXUS 300 Date/Time : 2006:03:05 12:41:12 Resolution : 200 x 150 Flash used : No Focal length : 5.4mm (35mm equivalent: 37mm) CCD width : 5.23mm Exposure time: 0.100 s (1/10) Aperture : f/2.7 Focus dist. : 2.69m Metering Mode: matrix Jpeg process : Progressive zeitpunkt der aufnahme != zeitpunkt der datei darum: uhr bei kamera richtig einstellen! mithilfe von jhead kann man die photos umbenennen, zB umbennung der JPEGs in datum+zeit als namen - format "YYYYMMDD-HHMMSS": $ jhead -n%Y%m%d-%H%M%S *.jpg Aktuellen Dateinamen benutzen: $ jhead -n%Y%m%d-%H%M%S.%f pattern img_4717.jpg -> 20060307-200328.img_4717.jpg Numerieren über %i (sequence number) $ jhead -n%04i.%f pattern Setzen der Dateizeit auf dien Zeit im exif header: $ jhead -ft pattern === jpegtran + zsh Drehen mithilfe von Funktionen (zsh): $ _JRR bild1.jpg bild2.jpg bild3.jpg function _JRR { for pic in $*; do TEMPFILE=$1_rot090_$$_tmp.jpg [ -f "$pic" ] echo "$pic"; /usr/bin/jpegtran -rotate 90 -copy all "$pic" \ >$TEMPFILE && touch -r "$pic" $TEMPFILE; mv $TEMPFILE "$pic" done } Löschen der korrespondierenden thumbnails: $ kick bild1.jpg bild2.jpg bild3.jpg Thumbnails der gedrehten Bilder und den Index neu generieren: $ iimage === ImageMagick == identify - describes the format and characteristics of one or more image files. $ identify *jpg *png linuxmag_france_nov99_vim55.jpg JPEG 826x1137 DirectClass 206kb written-with-nvi.png[1] PNG 88x31 88x31+0+0 DirectClass 440 == convert + mogrify: Reine Konvertierung: convert filename.jpg filename.gif Konvertierung mit angabe von breite und hoehe (geometry): convert -geometry 640x480 filename.jpg filename.png Mit Ausgabe während des Vorgangs: convert -verbose filename.jpg filename.png Kommentar ändern: convert -comment "the comment" picture mogrify - wie convert - überschreibt aber das Original. $ mogrify foo.jpg foo.gif === netpbm Netpbm is a toolkit for manipulation of graphic images, including conversion of images between a variety of different formats. There are over 220 separate tools in the package including converters for more than 80 graphics formats. 220 tools.. 80 Graphikformate... au weia! ;-) === exiftran (TODO) exiftran is a command line utility to transform digital image jpeg images. It can do lossless rotations like jpegtran, but unlike jpegtran it cares about the EXIF data: It can rotate images automatically by checking the exif orientation tag, it updates the exif informaton if needed (image dimension, orientation), it also rotates the exif thumbnail. It can process multiple images at once.