太平船务援助 Python
PIL assistance Python
我正在开发一个让用户重新调整图像大小的简单程序。但是我遇到了一个问题。当我尝试使用 Image.open()
打开图像时,出现以下错误:
AttributeError: class Image has no attribute 'open'
我已经对此进行了研究,它是通过将某些东西分配给 Image
来实现的,比如将它变成一个变量。但是我在我的代码中看不到我做了任何分配给 Image
的事情
这是我的代码:
from PIL import Image
from Tkinter import *
import tkFileDialog
import ttk
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.pack(fill=BOTH)
self.create_widgets()
def create_widgets(self):
self.tfr = Frame(self)
self.tfr.pack(side=TOP)
self.title = Label(self.tfr, font=("Arial", 20), text="Image Resizer")
self.title.pack(side=TOP, fill=X, padx=40)
self.spacer = Frame(self.tfr, bg="black")
self.spacer.pack(side=TOP, fill=X)
self.mfr = Frame(self)
self.mfr.pack(side=TOP)
self.brButton = ttk.Button(self.mfr, text="Browse", command=self.browse)
self.brButton.pack(side=LEFT, padx=(0, 2), pady=2)
self.diField = Label(self.mfr, text="File Path...", relief=SOLID, bd=1, width=25, anchor=W)
self.diField.pack(side=LEFT)
self.spacer2 = Frame(self, bg="black")
self.spacer2.pack(side=TOP, fill=X)
self.bfr = Frame(self)
self.bfr.pack(side=TOP)
self.rButton = ttk.Button(self.bfr, text="Resize", width=41, command=self.resize)
self.rButton.pack(side=TOP, pady=2)
def browse(self):
supportedFiles = [("PNG", "*.png"), ("JPEG", "*.jpg,*.jpeg,*.jpe,*.jfif"), ("GIF", "*.gif")]
filePath = tkFileDialog.askopenfile(filetypes=supportedFiles, defaultextension=".png", mode="rb")
if filePath != None:
photo = Image.open(filePath, "rb")
size = photo.size
print(size)
else:
pass
def resize(self):
print("Resize")
root = Tk()
root.title("Image Resizer")
root.resizable(0,0)
app = Application(root)
root.mainloop()
任何人都可以解释为什么我会收到此错误。非常感谢任何帮助..
Image
来自 Tkinter
替换相同来自 PIL
.
出于显而易见的原因,您确实应该避免使用 from PIL Tkinter import *
,但如果您必须这样做,则可以使用 from PIL import IMAGE as img
来区别于 Tkinter Image
改用ImageTk
:
from PIL import ImageTk # add to imports
# later on when loading selected image
photo = ImageTk.PhotoImage(file = filePath)
size = photo.width(), photo.height()
print(size)
我正在开发一个让用户重新调整图像大小的简单程序。但是我遇到了一个问题。当我尝试使用 Image.open()
打开图像时,出现以下错误:
AttributeError: class Image has no attribute 'open'
我已经对此进行了研究,它是通过将某些东西分配给 Image
来实现的,比如将它变成一个变量。但是我在我的代码中看不到我做了任何分配给 Image
这是我的代码:
from PIL import Image
from Tkinter import *
import tkFileDialog
import ttk
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.pack(fill=BOTH)
self.create_widgets()
def create_widgets(self):
self.tfr = Frame(self)
self.tfr.pack(side=TOP)
self.title = Label(self.tfr, font=("Arial", 20), text="Image Resizer")
self.title.pack(side=TOP, fill=X, padx=40)
self.spacer = Frame(self.tfr, bg="black")
self.spacer.pack(side=TOP, fill=X)
self.mfr = Frame(self)
self.mfr.pack(side=TOP)
self.brButton = ttk.Button(self.mfr, text="Browse", command=self.browse)
self.brButton.pack(side=LEFT, padx=(0, 2), pady=2)
self.diField = Label(self.mfr, text="File Path...", relief=SOLID, bd=1, width=25, anchor=W)
self.diField.pack(side=LEFT)
self.spacer2 = Frame(self, bg="black")
self.spacer2.pack(side=TOP, fill=X)
self.bfr = Frame(self)
self.bfr.pack(side=TOP)
self.rButton = ttk.Button(self.bfr, text="Resize", width=41, command=self.resize)
self.rButton.pack(side=TOP, pady=2)
def browse(self):
supportedFiles = [("PNG", "*.png"), ("JPEG", "*.jpg,*.jpeg,*.jpe,*.jfif"), ("GIF", "*.gif")]
filePath = tkFileDialog.askopenfile(filetypes=supportedFiles, defaultextension=".png", mode="rb")
if filePath != None:
photo = Image.open(filePath, "rb")
size = photo.size
print(size)
else:
pass
def resize(self):
print("Resize")
root = Tk()
root.title("Image Resizer")
root.resizable(0,0)
app = Application(root)
root.mainloop()
任何人都可以解释为什么我会收到此错误。非常感谢任何帮助..
Image
来自 Tkinter
替换相同来自 PIL
.
出于显而易见的原因,您确实应该避免使用 from PIL Tkinter import *
,但如果您必须这样做,则可以使用 from PIL import IMAGE as img
来区别于 Tkinter Image
改用ImageTk
:
from PIL import ImageTk # add to imports
# later on when loading selected image
photo = ImageTk.PhotoImage(file = filePath)
size = photo.width(), photo.height()
print(size)