#python #python-3.x #tkinter #python-imaging-library
Вопрос:
Я пытаюсь сохранить изображение с помощью подушки и Ткинтера, но продолжаю получать множество ошибок. Моя функция заключается в следующем:
def save_picture_click(self):
file_types = [('PNG File', '.png'), ('JPEG File', '.jpg'), ('Bitmap File', '.bmp'), ("GIF", '.gif')]
destination = final_image.filename = tkinter.filedialog.asksaveasfile(mode='w', filetypes=file_types, defaultextension=".png") #Line 101
final_image.save(destination)
final_image
является глобальным, определенным ранее, как эквивалент конечного изображения (либо в оттенках серого, либо в оттенках сепии). Попытка сохранить изображение возвращает следующее:
Traceback (most recent call last):
File "C:Program Files (x86)Microsoft Visual StudioSharedPython36_64libtkinter__init__.py", line 1702, in __call__
return self.func(*args)
File "<PROJECT FILE>", line 101, in save_picture_click
final_image.save(destination)
File "C:Program Files (x86)Microsoft Visual StudioSharedPython36_64libsite-packagesPILImage.py", line 2164, in save
save_handler(self, fp, filename)
File "C:Program Files (x86)Microsoft Visual StudioSharedPython36_64libsite-packagesPILPngImagePlugin.py", line 1225, in _save
fp.write(_MAGIC)
TypeError: write() argument must be str, not bytes
Если я вместо этого попробую следующий код:
def save_picture_click(self):
file_types = [('PNG File', '.png'), ('JPEG File', '.jpg'), ('Bitmap File', '.bmp'), ("GIF", '.gif')]
destination = tkinter.filedialog.asksaveasfile(mode='w', filetypes=file_types, defaultextension=".png")
final_image.save(destination) #Line 102
тогда я получу это:
return self.func(*args)
File "<PROJECT FILE>", line 102, in save_picture_click
final_image.save(destination)
File "C:Program Files (x86)Microsoft Visual StudioSharedPython36_64libsite-packagesPILImage.py", line 2164, in save
save_handler(self, fp, filename)
File "C:Program Files (x86)Microsoft Visual StudioSharedPython36_64libsite-packagesPILPngImagePlugin.py", line 1225, in _save
fp.write(_MAGIC)
TypeError: write() argument must be str, not bytes
Однако, если я запущу это:
def save_picture_click(self):
file_types = [('PNG File', '.png'), ('JPEG File', '.jpg'), ('Bitmap File', '.bmp'), ("GIF", '.gif')]
destination = final_image.filename = tkinter.filedialog.asksaveasfile(mode='wb', filetypes=file_types, defaultextension=".png")
final_image.save(destination)
Затем он возвращается без ошибок, но сохраняет черный квадрат вместо нужного мне изображения. Что я здесь делаю не так?
Комментарии:
1. Вам нужно рассказать нам больше о final_image. Есть ли у него атрибут имени файла? Есть ли у него функция сохранения? Это изображение Подушки?