Seite 1 von 1
Bilddateiformat ohne Dateiendung ermitteln
Verfasst: Montag 22. März 2010, 17:43
von Ubuntuxer
Ich möchte ein Bild, das keine Dateiendung hat, in einen anderen Ordner verschieben und dabei das Bild umbenennen, sodass es die richtige Dateiendung hat.
Eigentlich ein simples Problem, aber ich habe nur eine unschöne Lösung gefunden, indem ich das Bildformat mithilfe des Image Moduls ermittle.
Code: Alles auswählen
import os.path
import shuttil
import Image
src = '~/Bild' #Bild ohne Dateiendung
im = Image.open(src)
des = os.path.join('~/Desktop', ('Bild' + '.' + im.format.lower()))
shuttil.move(src, des)
Hat jemand von euch noch eine bessere Idee?
Verfasst: Montag 22. März 2010, 17:57
von Rebecca
python-magic kann sowas:
Code: Alles auswählen
>>> import magic
>>> ms = magic.open(magic.MAGIC_NONE)
>>> ms.load()
0
>>> ms.file("/tmp/bla")
'PNG image data, 100 x 100, 8-bit/color RGBA, non-interlaced'
Da muss man jedenfalls nicht das ganze Bild laden. Ob man sich jetzt die Endung aus dem String parsen muss oder ob magic noch netteres hat, weiss ich auch nicht.
Verfasst: Montag 22. März 2010, 17:58
von problembär
Man könnte den Linux-"file"-Befehl aufrufen. Auch nicht sehr schön.
Für Perl gibt's ein entsprechendes Modul; vielleicht gibt's ja so eins auch für Python?
Verfasst: Montag 22. März 2010, 18:30
von lunar
python-magic nutzt wohl libmagic, und diese Bibliothek gibt die Information über die Datei nur in Textform zurück.
Als Alternative kann aber vielleicht [mod]imghdr[/mod] aus der Standardbibliothek dienen. Keine Ahnung, ob das was taugt …
Verfasst: Montag 22. März 2010, 18:46
von numerix
Vermutlich (oder auch nicht) handelt es sich bei den in Frage kommenden Dateien nur um eine handvoll verschiedener Formate. Da dürfte es ggf. schon ausreichen, jeweils nur das 1. Byte zu lesen und auszuwerten:
255 -> jpg
71 -> gif
137 -> png
Je nachdem welches GIF, PNG oder JPG-Format du genau hast, kann es sein, dass das nicht für alle Untertypen gilt, aber das ist ja nicht schwer herauszufinden.
Edit: Erst jetzt habe ich mir den Link von lunar angesehen. Damit hast du doch genau, was du wolltest.
Verfasst: Montag 22. März 2010, 21:09
von Ubuntuxer
Vielen Dank für eure Antworten. Das Modul imghdr löst das Problem sehr elegant.

Verfasst: Dienstag 23. März 2010, 04:30
von jerch
libmagic kann zumindest den Mimetype ausgeben:
Code: Alles auswählen
>>> m=magic.open(magic.MAGIC_MIME)
>>> m.load()
0
>>> m.file('install_list')
'text/plain charset=us-ascii'
>>> m.file('bild.jpg')
'image/jpeg'
Den Mimetype kann man dann relativ einfach auf die Dateiendung mappen.