преобразование байтов в изображение с помощью tinytag и PIL

#python #image #python-imaging-library

#python #изображение #python-imaging-library

Вопрос:

Я использую модуль tinytags в python для получения обложки mp3-файла и хочу отобразить или сохранить его. Тип возвращаемой переменной отображается как байты. Я пытался возиться с PIL, используя frombytes, но безрезультатно. Есть ли какой-либо способ преобразовать байты в изображение?

 from tinytag import TinyTag
tag = TinyTag.get("03. Me, Myself amp; I.mp3", image=True)

img = tag.get_image()
  

Ответ №1:

На самом деле я получил изображение в формате PNG, когда позвонил tag.get_image() , но, думаю, вы можете получить JPEG. В любом случае, вы можете обернуть его в a BytesIO и открыть с помощью PIL / Pillow или отобразить его. Продолжение вашего кода:

 from PIL import Image
import io

...
im = tag.get_image()

# Make a PIL Image
pi = Image.open(io.BytesIO(im))

# Save as PNG, or JPEG
pi.save('cover.png')

# Display
pi.show()
  

Обратите внимание, что вам не обязательно использовать PIL / Pillow. Вы можете просмотреть первые несколько байтов и, если они представляют собой подпись PNG ( x89PNG), сохранить данные как двоичные с расширением PNG. Если подпись имеет формат JPEG ( xff xd8), сохраните данные в двоичном формате с расширением JPEG.