2012-01-19 23 views
6

estoy trabajando en un script que descarga varios archivos de imagen desde la web y luego hace algún procesamiento sobre ellos utilizando el PIL. La secuencia de comandos utiliza urlretreive para volcar las imágenes para archivos temporales, y en este momento estoy tratando de abrirlos en un visor utilizando el método image.show PIL(). Aquí está la parte pertinente del código:Python Imaging Library show() en Windows

def main(): 

link_queue = Queue.Queue() 
image_queue = Queue.Queue() 

links = get_image_links('test_search') 

for link in links: 
    link_queue.put(link) 

for image in xrange(len(links)): 
    #create image downloading threads 
    t = ImageDownloadingThread(link_queue, image_queue) 
    t.setDaemon(True) 
    t.start() 

link_queue.join() 

image_data = image_queue.get() 
image_file, image_url = image_data[0][0], image_data[1][0] 
#get the first image downloaded and take a look 
image = Image.open(image_file) 
image.show() 

Por desgracia, mientras que el archivo temporal parece cargar OK (Image.open no devuelve ningún error) me sale nada en el visor cuando image.show() es denominado:

enter image description here

también he intentado abrir archivos locales, no temporales, en caso de que era parte del problema y obtener el mismo resultado. El sistema operativo es Windows Vista 32 bit SP2. ¿Alguna idea sobre lo que podría estar yendo mal?

+0

Es un problema conocido, estoy tratando de encontrar los detalles. –

+1

ensayar el camino de http://stackoverflow.com/questions/4607633/image-format-to-save-in-python – cgohlke

Respuesta

7

show() intenta ejecutar el visor de imágenes predeterminado con un comando start /wait en un archivo de imagen temporal. Se supone que el parámetro /wait espera a que el visor salga para que el archivo pueda eliminarse. Lamentablemente, el visor predeterminado en Vista y Windows 7 no responde correctamente al /wait y regresa incluso antes de que hayan abierto el archivo; el archivo se borra antes de que pueda mostrarse.

La solución habitual es editar ImageShow.py en el paquete PIL y añadir un comando adicional que esperar unos segundos antes de borrar el archivo. Esto es un error, pero funciona la mayor parte del tiempo. Detalles en velocityreviews.com y here at StackOverflow.

La otra forma de solucionarlo es asociar el formato .bmp archivo con un programa que espera adecuadamente antes de regresar, por ejemplo mspaint.exe.

+0

Grande, gracias! – Bitrex

+0

No solo Windows: los visores de imágenes en otros sistemas operativos pueden tener el mismo problema. Esta podría ser la solución. –

Cuestiones relacionadas