Python: Как превратить изображение в STRING и обратно? - PullRequest
0 голосов
/ 11 января 2019

У меня есть изображение , подобное этому, загруженное в PIL.Image:

enter image description here

А теперь я хочу превратить ее в строку Python , и она не должна быть двоичной, как мне это сделать? Потому что, когда я пытался кодировать, я получаю следующую ошибку:

Мой код:

from PIL import Image

img = Image.open("testImage.jpeg")
string = img.tobytes()
string = string.decode("ascii")

Выход:

Traceback (most recent call last):
  File "/Users/tomschimansky/Desktop/SenderMAIN.py", line 5, in <module>
    string = string.decode("ascii")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

Когда это работает, я также хочу превратить строку обратно в изображение .

Другие методы , которые также не ухудшают d для меня:

  • Считайте изображение непосредственно из файла с помощью open("file","rb") и затем закодируйте его.
  • закодируйте его с помощью библиотеки codecs. (string = codecs.encode(string, "base64"))
  • закодировать его с помощью библиотеки base64 (смог преобразовать ее в строку, но строка выглядела так: ///////. (Только косая черта))

Спасибо за ваши ответы!

1 Ответ

0 голосов
/ 11 января 2019

Вы можете преобразовать в строку, как это:

import base64

with open("image.png", "rb") as image:
    b64string = base64.b64encode(image.read())

Это должно дать вам такие же результаты, как если бы вы запустили это в Терминале:

base64 < image.png

И вы можете преобразовать эту строку обратно в изображение PIL следующим образом:

from PIL import Image
import io

f = io.BytesIO(base64.b64decode(b64string))
pilimage = Image.open(f)

Это должно быть эквивалентно следующему в Терминале:

base64 -D < "STRING" > recoveredimage.png

Обратите внимание, что если вы отправляете это через LoRa, вам лучше отправить PNG-кодированную версию файла, как я здесь, так как он сжат и займет меньше времени. Вы также можете отправить расширенную версию файла в оперативной памяти, но это будет почти на 50% больше. Файл PNG составляет 13 КБ. Развернутая версия в памяти будет иметь размер 100 * 60 * 3 или 18 КБ.

...