Windows上的Python图像库show()
我正在写一个脚本,这个脚本可以从网上下载各种图片文件,然后用PIL库对它们进行一些处理。这个脚本使用urlretrieve把图片保存到临时文件里,现在我只是想用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()时,查看器里什么也没有:
我还尝试过打开本地的非临时文件,看看这是否是问题的一部分,但结果也是一样。我的操作系统是Windows Vista 32位SP2。有没有人知道可能出什么问题了?
1 个回答
8
show()
这个命令试图用一个默认的图片查看器来打开一个临时的图片文件,并使用start /wait
这个指令。/wait
的意思是要等到查看器关闭后,才能删除这个文件。可惜的是,在Vista和Windows 7系统下,默认的查看器对/wait
的响应不太好,甚至在文件打开之前就返回了,这样文件就会在显示之前被删除。
通常的解决办法是修改PIL包里的ImageShow.py文件,添加一个额外的命令,让程序在删除文件之前等几秒钟。虽然这不是最好的办法,但大多数情况下是有效的。详细信息可以查看velocityreviews.com和这里的StackOverflow。
另一种解决方法是把.bmp
文件格式关联到一个能正确等待的程序,比如mspaint.exe。