如何在屏幕上显示PIL图像?


79

我正在使用PIL库进行一些图像编辑。关键是,我不想每次都将图像保存在HDD上以在资源管理器中查看它。是否有一个小模块可以使我设置窗口并显示图像?


显示图像如何?在浏览器中?

在python制作的窗口中。像是pygame的窗口。我可以在pygame中做到,但是我想要一个更好的解决方案。
Bartlomiej Lewandowski

1
为什么不保存呢?
Joran Beasley 2012年

1
可以说我有100张小图片可以浏览。如果我可以将它们全部打印在屏幕上,而不必在其他程序中打开它们,那就更好了。我对wxpython不太熟悉。简单吗?
Bartlomiej Lewandowski

1
您将需要一些窗口库(无论是pygame,wxPython,TkInter,PyQt,PyGtk,PyWin32,PyObjC等)打开一个窗口。打开窗口后,大多数操作都会使在该窗口中显示图像变得微不足道。
abarnert 2012年

Answers:


110

PIL教程中

一旦拥有Image类的实例,就可以使用该类定义的方法来处理和操纵图像。例如,让我们显示刚刚加载的图像:

     >>> im.show()

更新:

如今,该Image.show()方法已正式记录PILPillow分支中,并说明了如何在不同的OS上实现该方法。


这实际上是我一直在寻找的东西,但是却出现了Windows Live照片库错误。0x800706ba
Bartlomiej Lewandowski 2012年

3
这是因为Windows实时照片库与调用该方法时创建的临时文件PIL的类型相关联-在Windows上默认为.bmp,而该类型不支持现代图像文件格式的许多功能。尝试im.format = "PNG"im.show()调用之前将图像格式属性显式设置为.png(即)。
martineau 2012年

问题仍然存在。我可能实际上会尝试一个窗口库。
Bartlomiej Lewandowski

3
PIL的内置show()方法是“显示其他脚本的脚本”的最简单版本。(在较早的Windows系统上,您最终会获得很多MSPaint窗口。)即使它不起作用,也值得提出建议并尝试。实际上,您可以通过在每个图像上明确启动
MSPaint.exe

3
@abarnert:实际上,该问题听起来像是Windows Live Photo Gallery 2011中错误,并且可以下载一个较新的版本来解决PILshow()问题。
martineau 2012年

21

我测试了一下,对我来说很好用:

from PIL import Image
im = Image.open('image.jpg')
im.show()

1
尽管这可能会回答问题(未测试),但最佳实践是在SO上的代码中提供解释。实际上不建议仅给出代码答案。
d_kennetz

2
这似乎不适用于Google colab笔记本。
kawingkelvin

2
@kawingkelvin问题是“如何在屏幕上显示PIL图像?”。:你应该为你的具体情况寻求答案别处......也许这里stackoverflow.com/questions/55288657/...
哈维

8

如果您发现PIL在某些平台上有问题,则使用本机图像查看器可能会有所帮助。

img.save("tmp.png") #Save the image to a PNG file called tmp.png.

对于MacOS:

import os
os.system("open tmp.png") #Will open in Preview.

对于大多数具有X.Org和桌面环境的GNU / Linux系统:

import os
os.system("xdg-open tmp.png")

对于Windows:

import os
os.system("powershell -c tmp.png")

羽毛,在MacOS上,不一定会在“预览”中打开,而是在默认的文件类型中打开。我正在处理一些大的jpg文件,将Preview转换为.png大约需要20秒。将jpg默认值更改为Chrome可以解决奇迹...
John White


2

您可以使用Tkinter在自己的窗口中显示图像,不依赖于系统中安装的图像查看器:

import Tkinter as tk
from PIL import Image, ImageTk  # Place this at the end (to avoid any conflicts/errors)

window = tk.Tk()
#window.geometry("500x500") # (optional)    
imagefile = {path_to_your_image_file}
img = ImageTk.PhotoImage(Image.open(imagefile))
lbl = tk.Label(window, image = img).pack()
window.mainloop()

对于Python 3,请替换import Tkinter as tkimport tkinter as tk


2
您在哪里看到代码涉及将映像保存到磁盘???该问题要求一种无需每次都将其保存在磁盘上的图像编辑方法。但是您必须至少一开始从磁盘打开映像。然后,您可以随意处理和查看作为'img'加载到内存中的映像,而无需使用任何磁盘操作。
Apostolos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.