#python #python-3.x #python-imaging-library
#python #python-3.x #python-imaging-library
Вопрос:
У меня есть следующий код:
img = Image.open('test.jpg')
texture_content = img.tobytes()
...
texture_content
Содержит перевернутое изображение в формате RGB.
Я хочу, чтобы texture_content был перевернут и был в формате BGRA.
Как я могу сделать это напрямую, не используя Image.transpose
и numpy
для замены цветовых каналов?
Ответ №1:
В документации Image.tobytes упоминается encoder_name='raw'
, но не объясняется *args
.
Вот несколько примеров использования кодировщика raw:
Чтобы перевернуть изображение и поменять местами красный и синий каналы:
img.tobytes('raw', 'BGR', 0, -1)
Чтобы перевернуть изображение:
img.tobytes('raw', 'RGB', 0, -1)
Для замены цветовых каналов:
img.tobytes('raw', 'BGR', 0, 1)
Для замены цветовых каналов и добавления дополнительного канала для альфа-версии:
img.tobytes('raw', 'BGRX', 0, 1)
К сожалению, альфа-значения будут 0
, чтобы избежать этого использования Image.convert
в первую очередь:
img.convert('RGBA').tobytes('raw', 'BGRA', 0, 1)
Вы можете использовать Image.frombuffer для texture_content
обратного чтения:
Чтение texture_content
, переверните изображение и поменяйте местами красный и синий каналы.
img = Image.frombuffer('RGBA', size, texture_content, 'raw', 'BGRA', 0, -1)