2010-12-07 7 views
9

Estoy tratando de usar una secuencia de comandos python llamada deepzoom.py para convertir grandes renderizaciones generales (a menudo más de 1GP) en el formato de imagen de Zoom profundo (es decir, formato de mosaico de google maps-esque), pero desafortunadamente funciona con PIL, que usualmente termina colgando debido a limitaciones de memoria. El creador ha dicho que está profundizando en VIPS, pero incluso nip2 (la interfaz gráfica de usuario para VIPS) no puede abrir la imagen. En otra pregunta de otra persona (aunque sobre el mismo tema), alguien sugirió OpenImageIO, que parece que tiene la capacidad, y tiene envoltorios de Python, pero no se proporcionan los binarios adecuados, y tratar de compilarlo en Windows es una pesadilla.¿Lidiar con imágenes enormes (potencialmente más de 30000x30000) en Python?

¿Hay alguna biblioteca alternativa para Python que pueda usar? He probado PythonMagickWand (envoltorio para ImageMagick) y PythonMagick (envoltorio para GraphicsMagick), pero ambos también tienen problemas de memoria.

+0

¿Qué le impide utilizar Linux para OpenImageIO? Obtenga un disco duro externo pequeño e instálelo (o una unidad interna no utilizada). También confío en que las especificaciones de tu sistema están a la altura de la tarea. Puedes intentar dividirlo en imágenes más pequeñas y convertirlas también –

+0

Lo había intentado antes, con resultados infructuosos, aunque no había hecho mucho para configurarlo correctamente. Tal vez esto suene ridículo, pero supuse que no sería compatible si intentaba ejecutar el script en Windows. – Nicolas

Respuesta

1

Parece que está tratando de usar imágenes georreferenciadas o algo similar, para lo cual una solución SIG parece más apropiada. Usaría GDAL - es una excelente biblioteca y viene con enlaces de Python fáciles de usar a través de Swig.

En Windows, la forma más fácil de instalarlo es a través del paquete FWTools de Frank Warmerdam.

+0

Eso es perfecto. Incluso parece incorporar herramientas de creación de pirámides, lo cual es un plus. ¡Aclamaciones! – Nicolas

+0

Hmm, aparentemente no. GDAL se basa en libjpeg, que devuelve 'Insufficient memory' cuando intenta abrir la imagen. Tal vez necesito (de alguna manera) convertirlo a un formato sin formato antes de poder hacer nada con él. Intentaré compilar en una VM de Linux y veré cómo funciona. – Nicolas

+0

@Nicolas: Hmm ... Sé que GDAL es capaz de trabajar con imágenes demasiado grandes para caber en la memoria. No he usado el controlador JPEG extensamente, así que no puedo comentar sobre él, pero espero que tenga un mejor éxito con un formato sin formato. –

0

¿Es útil una carga parcial? Si usa PIL y el formato de imagen es .BMP: puede abrir() un archivo de imagen (que no lo carga), luego hacer un recorte() y luego cargarlo, lo que solo cargará la parte de la imagen que has seleccionado por cultivo Probablemente también funcione con TGA, tal vez incluso para JPG y menos eficientemente para PNG y otros formatos.

2

Tuve un problema muy similar y terminé resolviéndolo usando netpbm, que funciona bien en Windows. Netpbm no tuvo problemas para convertir enormes archivos .png y luego cortar, recortar, combinar de nuevo (usando pamcrop, pamdice y pamundice) y convertir de nuevo a .png sin usar mucha memoria. Acabo de incluir los binarios y dlls netpbm necesarios con mi aplicación y los llamé desde python.

1

La última versión de libvips, 7.32, viene con un creador de DeepZoom muy rápido que puede trabajar con imágenes de cualquier tamaño. Proveedores:

$ vips dzsave huge.tif mydz 

escribirán los azulejos para mydz_files y escribir también un archivo mydz.dzi información para usted.

Ver this blog post para una introducción a dzsave.

Cuestiones relacionadas