Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Ordnung im Bilderchaos - Bildgrößen (und EXIF) auswerten
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3465

PostPosted: Sat Mar 11, 2006 12:47 pm    Post subject: Ordnung im Bilderchaos - Bildgrößen (und EXIF) auswerten Reply with quote

Wer kennt das nicht, da hat man sich z.B. die Urlaubsbilder eines Freundes kopiert, durch Zufall die Kopie einer kompletten Website auf der Platte oder die 1GB-Karte der Kamera mal wieder auf Festplatte kopiert.

Ok, hier ein Beispiel wie wir scriptgesteuert Ordnung in das Chaos bringen und anhand der Bildgrößen oder andere EXIF-Daten die Bilder umbenennen/verschieben/konvertieren können.

Zuerst benötigen wir das Paket media-gfx/jhead, dieses stellt das Binary jhead zur Verfügung welches uns Informationen zu einem JPEG-Bild liefert, hier zwei Beispiele:
Code:
# jhead 1.jpg
File name    : 1.jpg
File size    : 53555 bytes
File date    : 2004:10:19 11:46:11
Resolution   : 1200 x 798

Code:
# jhead 100_0640.jpg
File name    : 100_0640.jpg
File size    : 1004144 bytes
File date    : 2005:07:03 15:12:50
Camera make  : EASTMAN KODAK COMPANY
Camera model : KODAK CX7330 ZOOM DIGITAL CAMERA
Date/Time    : 2005:07:03 15:12:45
Resolution   : 1524 x 2032
Flash used   : No (auto)
Focal length :  5.6mm  (35mm equivalent: 37mm)
Exposure time: 0.0040 s  (1/250)
Aperture     : f/5.6
ISO equiv.   : 120
Whitebalance : Auto
Metering Mode: matrix
Exposure     : Action program (based towards fast shutter speed)

Nun können wir mit jhead ein wenig scripten und die Bilder z.B. entsprechend ihrer Auflösung behandeln. Das ganze sind nur Beispiele um zu zeigen was möglich wäre. Es gibt sicher noch mehr Einsatzgebiete, wie sortieren nach Datum, Kamera usw...

Als Ausgangspunkt benutze ich find, um auch einfach Unterordner mit einschliessen zu können. Das Grundkonstrukt sieht hierbei so aus, hier werden Bildgrößen ausgewertet:
Code:
find ./ -type f -iname '*.jpg' | while read file ; do
   resolution=`jhead "${file}" | grep ^Resolution | cut -d ":" -f 2`
   if  [ "$resolution" != "" ] ; then # zur Sicherheit, wurde wirklich eine Größenangbe ermittelt
      height=`echo $resolution | cut -d "x" -f 2 | sed -e "s/ //g"`
      width=`echo $resolution | cut -d "x" -f 1 | sed -e "s/ //g"`

      # hier kommt dann die weitere Verarbeitung des Bildes rein.

   fi
done

Zur weiteren Behandlung der Bilder können in obiges Beispiel u.a. eingefügt werden:

je nach Hoch- oder Querformat anders behandeln:
Code:
if  [ $width -gt $height ] ; then
   # spezielle Behandlunng von Querformatbildern
else
   # spezielle Behandlunng von Hochformatbildern
fi

oder Datei umbenennen. Größenangabe vorn:
Code:
mv "${file}" "`dirname ${file}`/${width}x${height}_`basename ${file}`"

oder Datei umbenennen, Größenangaben hinten:
(funktioniert nur bei casesensitiver Dateiendung, hier *.jpg, nicht bei *.JPG)
Code:
mv "${file}" "`dirname ${file}`/`basename ${file} .jpg`_${width}x${height}.jpg"

Alle Bilder welche Querformat sind und die Breite kleiner 640 Pixel löschen:
Code:
if  [ $width -gt $height ] && [ $width -lt 640 ] ; then
   rm "${file}"
fi

Alle Bilder eines Tages (nach EXIF-Datum) in jeweils ein Verzeichnis ablegen, sinnvoll wenn man die Speicherkarte der Kamera nur selten leert
Code:
find ./ -type f -iname '*.jpg' | while read file ; do
   date=`jhead "$file" | grep ^Date | cut -d ":" -f 2- | cut -d " " -f 2`
   if  [ "$date" != "" ] ; then # zur Sicherheit, wurde wirklich eine Datum ermittelt
      YY=`echo $date | cut -d ":" -f 1`
      MM=`echo $date | cut -d ":" -f 2`
      DD=`echo $date | cut -d ":" -f 3`
      test -d "/zielverzeichnis/${YY}-${MM}-${DD}" || mkdir "/zielverzeichnis/${YY}-${MM}-${DD}"
      mv "${file}" "/zielverzeichnis/${YY}-${MM}-${DD}"
   fi
done

Viel Spaß beim scripten... Weitere Möglichkeiten und Scripte können natürlich gern gepostet werden. Auch eine Mitteilung über die Nützlichkeit dieser Anleitung würde den Autor freuen.
Back to top
View user's profile Send private message
erdinger
n00b
n00b


Joined: 30 Sep 2006
Posts: 38

PostPosted: Sat Jan 13, 2007 9:55 pm    Post subject: Reply with quote

erst einmal herzlichen dank für dein post... und nun neve ich dich...

du hast folgenden code geschrieben, der mich sehr interessiert:
Code:
find ./ -type f -iname '*.jpg' | while read file ; do
   date=`jhead "$file" | grep ^Date | cut -d ":" -f 2- | cut -d " " -f 2`
   if  [ "$date" != "" ] ; then # zur Sicherheit, wurde wirklich eine Datum ermittelt
      YY=`echo $date | cut -d ":" -f 1`
      MM=`echo $date | cut -d ":" -f 2`
      DD=`echo $date | cut -d ":" -f 3`
      test -d "/zielverzeichnis/${YY}-${MM}-${DD}" || mkdir "/zielverzeichnis/${YY}-${MM}-${DD}"
      mv "${file}" "/zielverzeichnis/${YY}-${MM}-${DD}"
   fi
done

leider bin ich auf dem gebiet der shell-programmierung (und groß- und kleinschreibung) eine null.

ich habe folgendes problem: ich benutze zum scannen einen hp photosmart 2600... bekomme keine gui damit zum laufen, ist aber auch nicht so wild, da die bilder auch per http zur verfügung gestellt werden... also habe ich folgendes skript geschieben:

Code:
cd ~/Documents/bilder/scans
wget http://192.168.100.171/scan/image1.jpg


das scannt das bild und packt es unter dem namen image1.jpg in obiges verzeichnis... das nächste bild heißt dann image1.jpg.1 dann image1.jpg.2 u.s.w => sehr bescheiden
ich hätte gerne:
- für jeden monat ein verzeichnis (das er ggf. anlegt) (format: ~/Documents/bilder/scans/YYYYMM)
- das bild umbenannt nach DDHHiiss.jpg
(YYYY: jahr, MM: monat, DD tag, HH: stunde, ii: minute, ss: sekunde)
das darf er natürlich erst machen, nachdem das bild zuende gescannt ist
es muß nicht gesucht werden, da das bild ja immer den gleichen namen hat

kannst du mir da helfen?
_________________
I don't want to know how to copy rights. I want to know how to copy beer!
Back to top
View user's profile Send private message
erdinger
n00b
n00b


Joined: 30 Sep 2006
Posts: 38

PostPosted: Sat Jan 13, 2007 9:56 pm    Post subject: Reply with quote

du antwortetest:
========================================== schnipp

Warum postest Du das ganze nicht im Forum? So hätte jeder was davon. ;-)
Kannst ja nachholen, hänge ich meine Antwort da nochmal dran ;-)

Ansonsten wäre des Rätzels Lösung meiner Meinung nach einfach wget dazu zu veranlassen das Bild passend abzupeichern (im "Oberverzeichnis" auszuführen)

Code:
mkdir `date +%Y%m` &> /dev/null # Umleitung nach dev/null, sonst gibts Fehlermeldung wenns schon existiert
wget http://192.168.100.171/scan/image1.jpg -O `date +%Y%m`/`date +%Y%m%d%H%M%S`.jpg



========================================== schnapp
was ich hiermit getan habe
vielen dank dafür: dat funzt...
_________________
I don't want to know how to copy rights. I want to know how to copy beer!
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3465

PostPosted: Sat Jan 13, 2007 11:00 pm    Post subject: Reply with quote

So ists brav...

Also nochmal zur Erklärung an alle die jetzt bissl komisch schauen... er hatte per PN gefragt und ich schreib (wie man oben lesen kann) er kanns doch im Forum posten... ;-)
Back to top
View user's profile Send private message
gabelhonz
Apprentice
Apprentice


Joined: 30 Aug 2004
Posts: 222
Location: 10010100111110011

PostPosted: Tue Jan 16, 2007 9:23 pm    Post subject: Reply with quote

Hi,

was mich immer nervt ist das viele Bilder immer Querbilder sind und ich sie immer manuelle drehen muss.
Zwar benutze viele php gallerien das Feature diese dann automatisch zu drehen aber ich guck sie mir als im eog an.
Habe mir da sowas zusammengebastelt:

Code:

#!/bin/bash

LEFT="Right-Hand,Top"
RIGHT="Left-Hand,Bottom"

for i in `find $1 -type f -iname '*.jpg'`; do
ROTATE=`exiftags $i |grep "Image Orientation" |gawk '{print $3,$4}' | sed -e "s/ //g"`

  if [ $ROTATE = $LEFT ]; then
  convert -rotate "+90" $i $i
  fi

  if [ $ROTATE = $RIGHT ]; then
  convert -rotate "-90" $i $i
  fi

done


Das dreht mir dann alle meine Bilder richtig.
Was nicht so toll ist, das die exiftag Info immer noch die gleiche bleibt und nach nochmaligem ausführen des scriptes das Bild eben weitergedreht wird.
Weis nicht wie man das ändern könnte???

gruß gabelhonz
_________________
Wenn Chuck Norris ins Wasser fällt, wird Chuck Norris nicht nass. Wasser wird Chuck Norris.
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3465

PostPosted: Fri Jan 19, 2007 8:38 am    Post subject: Reply with quote

Reines Löschen des entsprechenden Exif-Wert sollte reichen, wenn Du das verschmerzen kannst. Evt. mußt Dein Script so anpassen, das es einfach nichts tut wenn dieser Exif-Wert nicht gesetzt ist. (Weiß nicht was exiftags zurückliefert wenn der nicht da ist, daher einfach mal testen.)
man jhead wrote:
-norot
Clears the rotation field in the Exif header without altering the image. Useful if the images were previously rotated without clearing the Exif rotation tag, as some image browsers will auto rotate images when the rotation tag is set.

Code:
jhead -norot $image
Back to top
View user's profile Send private message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3465

PostPosted: Fri Jun 01, 2007 9:13 am    Post subject: Reply with quote

Weil es gut hier dazu paßt: Benutzung von convert - http://forums.gentoo.org/viewtopic-t-562727.html
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum