从Python控制台显示.jpg
或.gif
图片的最简单方法是什么?
我有一个Python控制台程序正在检查包含本地存储图像链接的数据集。我应该如何编写脚本以便显示图像弹出图形窗口?
答案 0 :(得分:48)
使用真棒Pillow库:
>>> from PIL import Image
>>> img = Image.open('test.png')
>>> img.show()
这将在默认图像查看器中打开图像。
答案 1 :(得分:8)
在Xterm兼容终端中,您可以直接在终端中显示图像。见my answer to "PPM image to ASCII art in Python"
答案 2 :(得分:7)
安装Pillow(或PIL),例如:
$ pip install pillow
现在你可以
from PIL import Image
with Image.open('path/to/file.jpg') as img:
img.show()
其他常见的替代方案包括运行xdg-open
或使用图片路径启动浏览器:
import webbrowser
webbrowser.open('path/to/file.jpg')
如果你真的想在控制台中内嵌显示图片而不是新窗口,你可以这样做,但只能在使用Linux console的fbi
中查看ask Ubuntu或者使用ASCII-art,如CACA。
答案 3 :(得分:6)
为什么不在用户的网络浏览器中显示它?
答案 4 :(得分:6)
或者只是通过shell执行图像,如
import subprocess
subprocess.call([ fname ], shell=True)
将启动安装处理图像的任何程序。
答案 5 :(得分:6)
由于您可能正在运行Windows(通过查看标签),这将是从控制台打开和显示图像文件的最简单方法,而无需安装像PIL这样的额外内容。
import os
os.system('start pic.png')
答案 6 :(得分:5)
您无法在控制台窗口中显示图像。 您需要一个图形工具包,如Tkinter,PyGTK,PyQt,PyKDE,wxPython,PyObjC或PyFLTK。 有很多教程如何创建siomple窗口和加载图像iun python。
答案 7 :(得分:2)
我制作了一个简单的工具,可以显示带有文件名或图片对象或网址的图片。
它很粗糙,但它会匆忙做。
安装:
$ pip install simple-imshow
用法:
from simshow import simshow
simshow('some_local_file.jpg') # display from local file
simshow('http://mathandy.com/escher_sphere.png') # display from url
答案 8 :(得分:2)
如果您想在新窗口中显示,可以使用Tkinter + PIL库,如下所示:
import tkinter as tk
from PIL import ImageTk, Image
def show_imge(path):
image_window = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(image_window, image=img)
panel.pack(side="bottom", fill="both", expand="yes")
image_window.mainloop()
这是一个可在整个网络上找到的修改示例。
答案 9 :(得分:0)
您还可以使用Python模块APOC plugin
,该模块除了在Spyder控制台中显示图像外,还可以将图像嵌入Jupyter笔记本中。在Spyder中,图像将以全尺寸显示,而不是按比例缩放以适合控制台。
Ipython
答案 10 :(得分:0)
如果您想在原生图片查看器中打开图片,请尝试os.startfile
:
import os
os.startfile('file')
或者您可以使用 GUI 库将图像设置为背景,然后在需要时显示它。但是这种方式会使用更多的代码,并且可能会影响您的脚本运行所需的时间。但它确实允许您自定义用户界面。下面是一个使用 wxpython 的例子:
import wx
########################################################################
class MainPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)
self.SetBackgroundStyle(wx.BG_STYLE_PAINT) # Was wx.BG_STYLE_CUSTOM)
self.frame = parent
sizer = wx.BoxSizer(wx.VERTICAL)
hSizer = wx.BoxSizer(wx.HORIZONTAL)
for num in range(4):
label = "Button %s" % num
btn = wx.Button(self, label=label)
sizer.Add(btn, 0, wx.ALL, 5)
hSizer.Add((1,1), 1, wx.EXPAND)
hSizer.Add(sizer, 0, wx.TOP, 100)
hSizer.Add((1,1), 0, wx.ALL, 75)
self.SetSizer(hSizer)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
#----------------------------------------------------------------------
def OnEraseBackground(self, evt):
"""
Add a picture to the background
"""
# yanked from ColourDB.py
dc = evt.GetDC()
if not dc:
dc = wx.ClientDC(self)
rect = self.GetUpdateRegion().GetBox()
dc.SetClippingRect(rect)
dc.Clear()
bmp = wx.Bitmap("file")
dc.DrawBitmap(bmp, 0, 0)
########################################################################
class MainFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, size=(600,450))
panel = MainPanel(self)
self.Center()
########################################################################
class Main(wx.App):
""""""
#----------------------------------------------------------------------
def __init__(self, redirect=False, filename=None):
"""Constructor"""
wx.App.__init__(self, redirect, filename)
dlg = MainFrame()
dlg.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = Main()
app.MainLoop()
(来自 how to put a image as a background in wxpython 的源代码)
您甚至可以使用 timg
在终端中显示图像:
import timg
obj = timg.Renderer()
obj.load_image_from_file("file")
obj.render(timg.SixelMethod)
答案 11 :(得分:0)
您可以使用以下代码:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline
img = mpimg.imread('FILEPATH/FILENAME.jpg')
imgplot = plt.imshow(img)
plt.axis('off')
plt.show()