在Python中显示来自控制台的图像

时间:2009-09-11 22:22:50

标签: python image

从Python控制台显示.jpg.gif图片的最简单方法是什么?

我有一个Python控制台程序正在检查包含本地存储图像链接的数据集。我应该如何编写脚本以便显示图像弹出图形窗口?

12 个答案:

答案 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"

ImageMagick's "logo:" image in Xterm (show picture in new tab for full size viewing)

答案 2 :(得分:7)

在使用Pillow / PIL

的新窗口中

安装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控制台

如果你真的想在控制台中内嵌显示图片而不是新窗口,你可以这样做,但只能在使用Linux consolefbi中查看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)

(PyPI:https://pypi.org/project/timg

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