2010-12-07 5 views
9

Ich versuche, ein Python-Skript mit dem Namen deepzoom.py zu verwenden, um große Overhead-Renderings (oft über 1GP) in das Deep-Zoom-Bildformat (dh google maps-esque-Kachelformat) zu konvertieren, aber leider wird es von PIL betrieben endet normalerweise aufgrund von Speicherbeschränkungen. Der Ersteller hat gesagt, dass er sich in VIPS vertieft, aber sogar nip2 (das GUI-Frontend für VIPS) kann das Bild nicht öffnen. In einer anderen Frage von jemand anderem (obwohl zum gleichen Thema), schlug jemand OpenImageIO vor, der aussieht, als hätte es die Fähigkeit, und hat Python-Wrapper, aber es gibt keine richtigen Binärdateien, und versuchen, es unter Windows zu kompilieren ist ein Albtraum.Umgang mit riesigen (möglicherweise über 30000x30000) Bildern in Python?

Gibt es alternative Bibliotheken für Python, die ich verwenden kann? Ich habe versucht PythonMagickWand (Wrapper für ImageMagick) und PythonMagick (Wrapper für GraphicsMagick), aber beide von ihnen auch in Speicherprobleme.

+0

Was hält Sie davon ab, Linux für OpenImageIO zu verwenden? Holen Sie sich eine kleine externe Festplatte und installieren Sie sie (oder ein unbenutztes internes Laufwerk). Ich vertraue auch, dass Ihre Systemspezifikation der Aufgabe gewachsen ist. Sie können versuchen, es in kleinere Bilder zu teilen und diese auch zu konvertieren –

+0

Ich hatte das früher versucht, mit erfolglosen Ergebnissen, obwohl ich nicht viel getan habe, um es richtig einzurichten. Vielleicht klingt das lächerlich, aber ich nahm an, dass es nicht kompatibel wäre, wenn ich versuchen würde, das Skript unter Windows auszuführen. – Nicolas

Antwort

1

Es klingt, als ob Sie georeferenzierte Bilder oder Ähnliches verwenden möchten, für die eine GIS-Lösung passender klingt. Ich würde GDAL verwenden - es ist eine ausgezeichnete Bibliothek und kommt mit einfach zu bedienenden Python-Bindungen über Swig.

Unter Windows ist der einfachste Weg zur Installation über Frank Warmerdam FWTools Paket.

+0

Das ist perfekt. Es scheint sogar auch Werkzeuge zur Pyramidenerzeugung zu enthalten, was ein Plus ist. Prost! – Nicolas

+0

Hmm, anscheinend nicht. GDAL stützt sich auf libjpeg, das beim Versuch, das Bild zu öffnen, "Nicht genügend Speicher" zurückgibt. Vielleicht muss ich es (irgendwie) in ein Rohformat konvertieren, bevor ich irgendetwas damit machen kann. Ich werde versuchen, auf einer Linux-VM zu kompilieren, und sehen, wie es geht. – Nicolas

+0

@Nicolas: Hmm ... Ich weiß, dass GDAL mit Bildern arbeiten kann, die zu groß sind, um in den Speicher zu passen. Ich habe den JPEG-Treiber nicht ausgiebig benutzt, daher kann ich nichts dazu sagen, aber ich würde erwarten, dass Sie mit einem Rohformat besser Erfolg haben würden. –

0

Ist eine Teillast sinnvoll? Wenn Sie PIL verwenden und das Bildformat .BMP lautet, können Sie() eine Bilddatei öffnen (die sie nicht lädt), dann einen Ausschnitt() erstellen und dann laden - wodurch nur der Bildteil tatsächlich geladen wird die Sie nach Zuschneiden ausgewählt haben. Wird wahrscheinlich auch mit TGA arbeiten, vielleicht sogar für JPG und weniger effizient für PNG und andere Formate.

2

Ich hatte ein sehr ähnliches Problem und ich endete es mit netpbm, das funktioniert gut auf Windows zu lösen. Netpbm hatte kein Problem damit, riesige .png-Dateien zu konvertieren und dann zu schneiden, zu beschneiden, neu zu kombinieren (mit Pamcrop, Pamdice und Pamundice) und zurück zu .png zu konvertieren, ohne viel Speicher zu verbrauchen. Ich habe nur die notwendigen netpbm Binaries und DLLs mit meiner Anwendung und rief sie von Python.

1

Die neuesten libvips, 7.32, kommt mit einem sehr schnellen DeepZoom-Ersteller, der mit Bildern jeder Größe arbeiten kann. Versuchen:

$ vips dzsave huge.tif mydz 

Werden die Fliesen mydz_files schreiben und auch eine mydz.dzi Info-Datei für Sie schreiben.

Eine Einführung zu dzsave finden Sie unter this blog post.

Verwandte Themen