Проблемы с сохранением изображений с помощью подушки и Ткинтера

#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. Есть ли у него атрибут имени файла? Есть ли у него функция сохранения? Это изображение Подушки?