【问题标题】:PhotoImage zoom照片图像缩放
【发布时间】:2019-10-16 10:33:35
【问题描述】:

我正在尝试放大图像并使用以下代码显示它

import tkinter as tk
from PIL import Image as PIL_image, ImageTk as PIL_imagetk

window = tk.Tk()

img1 = PIL_imagetk.PhotoImage(file="C:\\Two.jpg")
img1 = img1.zoom(2)

window.mainloop()

但是python说AttributeError: 'PhotoImage' object has no attribute 'zoom'。这里有一个相关帖子的评论: Image resize under PhotoImage 上面写着“PIL 的 PhotoImage 没有实现 Tkinter 的 PhotoImage 的缩放(以及其他一些方法)”。

我认为这意味着我需要在我的代码中导入其他内容,但我不确定是什么。任何帮助都会很棒!

【问题讨论】:

    标签: python tkinter zooming photoimage


    【解决方案1】:

    img1 没有方法zoom,但是img1._PhotoImage__photo 有。所以只需将您的代码更改为:

    import tkinter as tk
    from PIL import Image as PIL_image, ImageTk as PIL_imagetk
    
    window = tk.Tk()
    
    img1 = PIL_imagetk.PhotoImage(file="C:\\Two.jpg")
    img1 = img1._PhotoImage__photo.zoom(2)
    
    label =  tk.Label(window, image=img1)
    label.pack()
    
    window.mainloop()
    

    顺便说一句,如果你想缩小图片可以使用subsampleimg1 = img1._PhotoImage__photo.subsample(2)的方法将图片缩小一半。

    如果你有一个 PIL 图像,那么你可以像下面的例子一样使用调整大小:

    import tkinter as tk
    from PIL import Image, ImageTk
    
    window = tk.Tk()
    
    image = Image.open('C:\\Two.jpg')
    image = image.resize((200, 200), Image.ANTIALIAS)
    img1 = ImageTk.PhotoImage(image=image)
    
    label = tk.Label(window, image=img1)
    label.pack()
    
    window.mainloop()
    

    注意我只是导入ImageImageTk,看到没有必要重命名为PIL_imagePIL_imagetk,这对我来说只是令人困惑

    【讨论】:

    • 谢谢。是否有一些文档解释了为什么我需要使用._PhotoImage__photo?我不知道我自己怎么能解决这个问题......
    • 我花了一点时间通过dir(例如`.__PhotoImage__photo.__dir__()')找到方法。由于它以下划线开头,这实际上是一种私有方法,不鼓励公开使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多