PIL的Image.show()调出*两个*不同的观众

时间:2010-06-14 02:03:15

标签: python linux python-imaging-library

当在python shell中使用图像时,我使用image.show(),其中image是Image的一个实例。很久以前没有发生任何事情,但在定义了一个名为“xv”的海市蜃楼的符号链接后,我很高兴。

最近几天,show()将调出ImageMagick的显示屏和Mirage。目前还不清楚show()获取运行内容的信息。文档没有帮助。如何让它表现出来并只提出它认为的xv?

6 个答案:

答案 0 :(得分:5)

有点过时但是...... 我解决了这个问题,更改了文件/usr/lib/python2.7/dist-packages/PIL/ImageShow.py的代码。缺少returnshow类的方法Viewer(第66行附近):return self.show_image(image, **options)

答案 1 :(得分:3)

嗯,首先,im.show仅用于调试目的,但不保证可以正常工作。

尽管如此,您始终可以查看源代码(打开“pydoc PIL”,FILE部分指出模块所在的位置):

在Windows中,PIL将使用“开始/等待文件名”

在Mac中,它使用“open -a /Applications/Preview.app”

在Linux上,如果找到则显示'或'xdg-open'。

答案 2 :(得分:1)

我找到的一种解决方法。

我用过:

image.save('something.png')

使用默认预览程序从文件管理器打开png。 然后,每当我再次调用save时,预览器会自动刷新,并且我获得了新图像:)

答案 3 :(得分:0)

它能够将查看器指定为command方法的show参数,例如

  
    
      

img.show(命令= 'FEH')

    
  

答案 4 :(得分:0)

我遇到了同样的问题,这是PIL中的一个问题。您可以通过以下方式更改PIL代码:

在ImageShow.py文件中替换

return "start /wait %s && del /f %s" % (file,file) 

return "start /wait %s && del /wait /f %s" % (file,file)

答案 5 :(得分:0)

ImageShow包含ImageShow._viewers中支持和可用的查看者列表。在我的盒子上,找到了两个观众:

>>> import PIL.ImageShow
>>> PIL.ImageShow._viewers
[<PIL.ImageShow.DisplayViewer instance at 0x2587ef0>, <PIL.ImageShow.XVViewer instance at 0x2587f80>]

不幸的是ImageShow.show()使用了所有可用的观看者。这样就会显示两个窗口。

解决方案是将查看器注册表仅减少到第一个可用的查看器:

>>> PIL.ImageShow._viewers = [ PIL.ImageShow._viewers[0] ]