2012-01-19 37 views
6

我正在从脚本中下载各种图像文件,然后使用PIL对它们进行一些处理。该脚本使用urlretreive将图像转储到临时文件,现在我只是试图在使用PIL image.show()方法的查看器中打开它们。这里是代码的相关部分:在Windows上的Python图像库显示()

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() 

不幸的是,在临时文件似乎加载OK(Image.open不返回任何错误)我什么也得不到的浏览器时image.show()是所谓:

enter image description here

我还试图打开本地非临时文件中,这是问题的一部分,并得到同样的结果情况。操作系统是Windows Vista 32位SP2。任何想法可能会出错?

+0

这是一个已知的问题,我试图找到细节。 –

+1

尝试从http://stackoverflow.com/questions/4607633/image-format-to-save-in-python – cgohlke

回答

7

show()尝试使用临时映像文件上的start /wait命令执行默认图像查看器。参数/wait应该等待直到查看器退出,以便可以删除该文件。不幸的是,Vista和Windows 7下的默认浏览器不能正确响应/wait,甚至在它们打开文件之前就会返回;该文件在被显示之前被删除。

通常的修复方法是在PIL软件包中编辑ImageShow.py,并在删除文件之前添加一个额外的命令以等待几秒钟。这是一个混乱,但它大部分时间工作。详情请见velocityreviews.comhere at StackOverflow

解决该问题的另一种方法是将.bmp文件格式与返回前正确等待的程序相关联,例如mspaint.exe。

+0

修复很好,谢谢! – Bitrex

+0

不仅仅是Windows - 其他操作系统上的图像查看器可能会遇到同样的问题。这可能是修复。 –