使用PIL在不添加文件格式的情况下显示图像

时间:2014-09-04 01:29:08

标签: python image-processing python-imaging-library

我已经编写了一个功能,可以搜索文件夹并在新窗口中显示图片(如果文件存在)但我总是需要在功能可以工作之前添加图像文件格式或扩展名。

有没有办法可以解决忽略.gif.png

等扩展名的问题
from tkinter import *
from PIL import *

def display_pix():
    hmm   = Toplevel(window)
    hmm.geometry('300x300')
    label = Label(hmm,)
    label.pack()

    PhotoImage(        file = 'C:\\Python34\\' + e.get())
    logo = PhotoImage( file = 'C:\\Python34\\' + e.get()) 
    label.img = logo
    label.config(image = label.img)

 window = Tk()
 e = Entry(  window, width= 20)
 b = Button( window, text = 'search',command = display_pix)
 e.place(x = 50, y = 30)
 b.place(x = 70, y = 50)

 window.mainloop()

1 个答案:

答案 0 :(得分:0)

如果文件名为spam.gif,那就是它的文件名,因此您无法将其打开为spam。 (是的,Windows资源管理器尝试向您隐藏此内容,但仅限于此范围内 - 如果您想要执行相同的操作,则必须执行与Windows资源管理器相同的操作。)

如果您希望用户能够键入spam,并且您的程序要自动打开spam.gifspam.jpgspam.png,则需要明确查找匹配您想要的模式的文件。如果找到两个这样的文件,或者一个名为spam.txt的文件根本不是图像,或者......,你还必须决定该怎么做。

最简单的版本(只是尝试打开你找到的第一个spam.*)是这样的:

def open_image_file(path, name):
    for fullname in os.listdir(path):
        if fnmatch.fnmatch(f, name + '.*'):
            return PhotoImage(file=os.path.join(path, fullname))

现在你可以这样做:

logo = open_image_file(r'C:\Python34', e.get())

(如果找不到名为spam.*的文件,您最终会得到None。例如,如果发现文本文件或可执行文件,PhotoImage引发了异常,您将获得例外。否则,logo将是第一个PhotoImage文件的spam.*。)