gpt4 book ai didi

python - 如何使用python中的tkinter上的保存按钮保存图像

转载 作者:行者123 更新时间:2023-12-01 07:34:50 24 4
gpt4 key购买 nike

我尝试使用 tkinter 创建“另存为”按钮将图像保存在某个位置目录中,但遇到了问题

from tkinter import *
from tkinter import ttk
from tkinter import filedialog
from PIL import ImageTk, Image, ImageDraw
import cv2
import numpy as np

img = cv2.imread('face_person1.jpg')
# convert the images to PIL format...
edged = Image.fromarray(img)

edged = ImageTk.PhotoImage(edged)

def savefile():
hsl = Image.open(edged)
hsl = filedialog.asksaveasfile(mode='w', defaultextension=".jpg")
if hsl is None:
return
sv = edged.save()
sv.close()


button = Button(text="save as", command=savefile)
button.pack()

错误信息是:

Exception in Tkinter callback fp = io.BytesIO(fp.read())
AttributeError: 'numpy.ndarray' object has no attribute 'read'

最佳答案

要保存图像,您必须使用 PIL.Image,因此不要将 PhotoImage 分配给用于保存 PIL.Image 的变量

edge = Image.fromarray(img)

tk_edge = ImageTk.PhotoImage(edge)

并且您必须使用文件名来保存它

edge.save(filename)

完整的工作示例

import tkinter as tk
from tkinter import ttk
from tkinter import filedialog
from PIL import ImageTk, Image, ImageDraw
import cv2
import numpy as np

# --- functions ---

def savefile():
filename = filedialog.asksaveasfile(mode='w', defaultextension=".jpg")
if not filename:
return
edge.save(filename)

# --- main ---

root = tk.Tk()

img = cv2.imread('face_person1.jpg')
edge = Image.fromarray(img)

tk_edge = ImageTk.PhotoImage(edge)
label = tk.Label(root, image=tk_edge)
label.pack()

button = tk.Button(root, text="save as", command=savefile)
button.pack()

root.mainloop()

关于python - 如何使用python中的tkinter上的保存按钮保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com