Я пытаюсь создать редактор изображений, который добавляет текст в изображение с помощью подушки. Моя проблема заключается в сохранении моего отредактированного изображения, чтобы пользователь мог выбрать имя файла сохранения, открыв диалог сохранения. Глядя на другие вопросы и ответы, я пришел с этим:Как «сохранить как» отредактированное изображение (png) с помощью диалогового окна файла в tkinter и Pil в Python
def onOpen(self):
im = Image.open(askopenfilename())
caption = simpledialog.askstring("Label", "What would you like the label on your picture to say?")
fontsize = 15
if im.mode != "RGB":
im = im.convert("RGB")
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("arial.ttf", fontsize)
draw.text((0, 0),str(caption),(255,0,0),font=font)
file = filedialog.asksaveasfile(mode='w', defaultextension=".png")
if file:
file.write(im)
file.close()
Однако, я получаю следующее сообщение об ошибке при запуске его:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Renee\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__
return self.func(*args)
File "C:\Users\Renee\AppData\Local\Programs\Python\Python35-32\tkinterguitest.py", line 52, in onOpen
file.write(im)
TypeError: write() argument must be str, not Image
Я знаю, что вопрос заключается в том, что запись может быть использована только с строки, так есть ли команда, например file.write, но для изображений? Спасибо!
Спасибо за помощь! к сожалению, я все еще получаю сообщение об ошибке. Это ошибка: 'TypeError: write() аргумент должен быть str, а не байтами', что является странным, так как я удалил аргумент записи – Renee
, в частности, он говорит, что ошибка указана в строке 39, в' onOpen im = Image.open (askopenfilename()) 'и' строка 52, в onOpen im.save (файл) # сохраняет изображение во входное имя файла. ' – Renee
Я только понял, что проблема в этой строке:' file = filedialog.asksaveasfile (mode = 'w', defaultextension = ".png", filetypes = (("PNG-файл", "* .png"), ("Все файлы", "*. *"))) 'если я открою его с помощью wb вместо w это сохраняет, но без текста, который я хотел бы на нем – Renee