Wie bringe ich Python ein neues Datenformat bei?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
axon
User
Beiträge: 15
Registriert: Donnerstag 23. Juni 2011, 19:21

Guten Abend,

ich habe das Problem, dass das einlesen von tiff Bild Dateien zu langsam dauert (via Image und Image.seek()). Ich würde gern etwas schreiben, dass es python ermöglicht mit diesem Datenformat schneller umzugehen ... wobei schneller heißt alle Daten aufeinmal in den Arbeitsspeicher zu laden und am besten in einem dreidimensionalen Array zu parken.

Wie sollte ich vorgehen? Was muss/müsste ich dazu können? :K [Ich programmiere jetzt schon seit etwas über einem Jahr mit python an dem Projekt für welches ich die tiff Unterstützung schreiben will; Und die langen Laufzeiten, die ich in Java nicht habe nerven mich ein wenig...]

Ich wäre für jede Art des Hinweises dankbar.

Axon
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

axon hat geschrieben: ich habe das Problem, dass das einlesen von tiff Bild Dateien zu langsam dauert (via Image und Image.seek()).
Meinst Du "Pil"? Wenn ja, wieso `seek`?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

axon hat geschrieben:ich habe das Problem, dass das einlesen von tiff Bild Dateien zu langsam dauert [...] gern etwas schreiben, dass es python ermöglicht mit diesem Datenformat schneller umzugehen [...] am besten in einem dreidimensionalen Array zu parken.
Wenn es dir darum geht ein TIFF in einen NumPy Arrays zu laden, ist PIL leider extrem langsam. Ich hatte das Problem selbst. Es gibt allerdings einige anderen implementieren, die deutlich schneller sein sollen. Einfach mal die Suchmaschine deines Vertrauens fragen. Ich bin übrigens zu PNG gewechselt, was von Matplotlib/SciPy deutlich besser unterstützt wird und unter anderem zlib Kompression erlaubt.
axon hat geschrieben:Wie sollte ich vorgehen? Was muss/müsste ich dazu können?
Du müsstest dir die Spezifikation von TIFF besorgen und einen Parser schreiben. Schau dir mal das ``struct`` Modul an. Es bietet sich an eine TIFF Datei als Klasse zu implementieren.

Grüße
Gerrit
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

axon hat geschrieben:ich habe das Problem, dass das einlesen von tiff Bild Dateien zu langsam dauert (via Image und Image.seek()). Ich würde gern etwas schreiben, dass es python ermöglicht mit diesem Datenformat schneller umzugehen ...
Ja, das Problem hatte ich auch mal, am einfachsten ist es einfach die tifflib zu wrappen, kannst das benutzen wenn du willst: http://www.python-forum.de/viewtopic.php?f=11&t=24713, readimg ist die Funktion die dich vermutlich primär interessierst. Wenn du mehr als ein Bild pro Datei hast musst du ein bisschen fummeln, das habe ich nur rudimentär irgendwo unterstützt.

Braucht nur die tifflib irgendwo in einem auffindbaren Pfad.
Antworten