使用Pillow Image.tobytes翻转图像并交换颜色通道



我有以下代码:

img = Image.open('test.jpg')
texture_content = img.tobytes()
...

texture_content包含RGB格式的图像上方。

我希望texture_content被翻转,并采用BGRA格式。

如何在不使用Image.transposenumpy交换颜色通道的情况下直接执行此操作?

Image.tobytes的文档提到了encoder_name='raw',但没有解释*args

以下是使用原始编码器的几个示例:

要翻转图像并交换红色和蓝色通道:

img.tobytes('raw', 'BGR', 0, -1)

翻转图像:

img.tobytes('raw', 'RGB', 0, -1)

要交换颜色通道:

img.tobytes('raw', 'BGR', 0, 1)

要交换颜色通道并为alpha添加额外通道:

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)

最新更新