Windows上的Python成像库show()

时间:2012-01-19 20:42:17

标签: python python-imaging-library

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

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

不幸的是,虽然临时文件似乎加载正常(Image.open没有返回任何错误),但是当调用image.show()时,我在查看器中什么也得不到:

enter image description here

我还尝试打开本地非临时文件,以防这是问题的一部分并获得相同的结果。操作系统是Windows Vista 32位SP2。关于可能出现什么问题的任何想法?

1 个答案:

答案 0 :(得分:7)

show()尝试在临时图像文件上使用start /wait命令执行默认图像查看器。 /wait参数应该等到查看器退出,以便可以删除该文件。遗憾的是,Vista和Windows 7下的默认查看器无法正确响应/wait并在打开文件之前返回;文件在显示之前就会被删除。

通常的解决方法是在PIL包中编辑ImageShow.py并添加一个额外的命令,等待几秒钟才能删除文件。这是一个kludge,但它大部分时间都有效。详情请见velocityreviews.comhere at StackOverflow

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