Конвертировать PIL Image в байтовый массив?

У меня есть изображение в формате изображения PIL. Мне нужно преобразовать его в байтовый массив.

img = Image.open(fh, mode='r')  
roiImg = img.crop(box)

Теперь мне нужно roiImg как байтовый массив.

4 ответа

Решение

Спасибо всем за вашу помощь.

Наконец-то все решено!!

import io

img = Image.open(fh, mode='r')
roiImg = img.crop(box)

imgByteArr = io.BytesIO()
roiImg.save(imgByteArr, format='PNG')
imgByteArr = imgByteArr.getvalue()

При этом мне не нужно сохранять обрезанное изображение на жестком диске, и я могу извлечь массив байтов из обрезанного изображения PIL.

Это мое решение. Воспользуйтесь этой функцией.

from PIL import Image
import io

def image_to_byte_array(image:Image):
  imgByteArr = io.BytesIO()
  image.save(imgByteArr, format=image.format)
  imgByteArr = imgByteArr.getvalue()
  return imgByteArr

Я думаю, вы можете просто назвать образ PIL .tobytes() метод, а оттуда, чтобы преобразовать его в массив, используйте bytes встроенный.

#assuming image is a flattened, 3-channel numpy array of e.g. 600 x 600 pixels
bytesarray = bytes(Image.fromarray(array.reshape((600,600,3))).tobytes())

Файл Python для чтения и извлечения двоичного массива

      import base64
with open(img_file_name, "rb") as f:
    image_binary = f.read()
    base64_encode = base64.b64encode(image_binary)
    byte_decode = base64_encode.decode('utf8')
Другие вопросы по тегам