вращение изображения с помощью PIL без его сохранения - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь открыть изображение из электронного письма и затем повернуть его. Я не могу заставить его работать без сохранения изображения в файл ранее.

Я получаю эту ошибку:

Traceback (most recent call last):
  File "stack_help.py", line 41, in <module>
    with Image.open(part.get_payload(decode=True)) as img:
  File "/home/ksb/Dropbox/Python/imap/venv/lib/python3.6/site-packages/PIL/Image.py", line 2809, in open
    fp = builtins.open(filename, "rb")
ValueError: embedded null byte

Вот мой код:

 import email
 import imaplib
 import os
 import mimetypes
 from PIL import Image

 host = 'mail.host.dk'
 user = 'user@host.dk'
 password = 'password'
 mailbox = 'INBOX'

 mail = imaplib.IMAP4_SSL(host)
 mail.login(user,password)
 mail.select(mailbox)

 result,data= mail.uid('search',None,"ALL")
 inbox_item_list = data[0].split()

 i = 1
 for item in inbox_item_list:
     result2,email_data = mail.uid('fetch',item, '(RFC822)')
     raw_email = email_data[0][1].decode("utf-8")
     email_message = email.message_from_string(raw_email)

     for part in email_message.walk():
         filename = part.get_filename()
         content_type = part.get_content_type()
         save_path = os.path.join(os.getcwd(),"emails", str(i) + " - " + "folder")
         if not os.path.exists(save_path):
             os.makedirs(save_path)

         if filename:
             with open(os.path.join(save_path, filename), 'wb') as fp:
                 if "image" in content_type:
                     fp.write(part.get_payload(decode=True))
                     with Image.open(part.get_payload(decode=True)) as img:
                         img.rotate(20)

     i += 1

Эта строка сохраняет изображение в виде файла:

fp.write(part.get_payload(decode=True))

У меня нет проблем, открывая этот файл как изображение, а затем поворачивая его, но следующая часть не работает:

with Image.open(part.get_payload(decode=True)) as img:
        img.rotate(20)

Любая помощь приветствуется.

BR Kresten

...