img = l1.image if img is None: return # 弹出一个对话框,让用户选择保存文件的位置和文件名 filetypes = [('JPEG', '*.jpg'), ('PNG', '*.png')] filename = filedialog.asksaveasfilename(initialfile='.jpg', filetypes=filetypes) if filename: # 保存图片 pil_image = Image.open("image.jpg") # 创建 PhotoImage 对象 photo_image = ImageTk.PhotoImage(pil_image) # 将 PhotoImage 转换为 PIL 图像 pil_image = Image.open(photo_image) img.save(filename)出现AttributeError: 'PhotoImage' object has no attribute 'save'
时间: 2024-03-23 17:39:27 浏览: 124
抱歉,我之前的回答有误。您需要使用Pillow库中的`Image`类来保存图像,而不是使用`Photo`类。以下是修改后的示例代码:
```
from PIL import Image
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
# 创建一个 Tkinter 窗口
root = tk.Tk()
# 创建一个 Label,展示图像
l1 = ttk.Label(root)
l1.pack()
# 加载图像
img = Image.open("image.jpg")
l1.image = ImageTk.PhotoImage(img)
l1.configure(image=l1.image)
# 弹出一个对话框,让用户选择保存文件的位置和文件名
filetypes = [('JPEG', '*.jpg'), ('PNG', '*.png')]
filename = filedialog.asksaveasfilename(initialfile='.jpg', filetypes=filetypes)
if filename:
# 保存图像
img.save(filename)
```
请注意,修改后的代码中,我们使用`img.save(filename)`来保存图像,而不是使用`PhotoImage`类。
相关问题
def save(): # 获取当前显示的图片 img = l1.image if img is None: return # 弹出一个对话框,让用户选择保存文件的位置和文件名 filename = filedialog.asksaveasfilename(defaultextension='.jpg') if filename: # 保存图片 img.imwrite(filename,img)代码优化
在你的代码中,存在几个问题:
1. `img`对象没有`imwrite`方法,应该使用`Image`对象的`save`方法来保存图片。
2. 在使用`asksaveasfilename`方法时,应该指定文件类型的过滤器,否则用户可以选择保存任何类型的文件。
3. 代码中的缩进存在问题,需要进行修改。
下面是一个经过优化的代码示例:
``` python
from tkinter import filedialog
from PIL import ImageTk
def save():
# 获取当前显示的图片
img = l1.image
if img is None:
return
# 弹出一个对话框,让用户选择保存文件的位置和文件名
filetypes = [('JPEG', '*.jpg'), ('PNG', '*.png')]
filename = filedialog.asksaveasfilename(defaultextension='.jpg', filetypes=filetypes)
if filename:
# 保存图片
img.save(filename)
```
在上面的代码中,我们使用`PIL`库中的`Image`对象的`save`方法来保存图片,同时在使用`asksaveasfilename`方法时,指定了文件类型的过滤器,这样就可以限制用户只能选择保存指定类型的文件了。同时,我们还对代码中的缩进进行了修正,让代码更加规范易读。
阅读全文