我有以下代码:
img = Image.open('test.jpg')
texture_content = img.tobytes()
...
texture_content
包含RGB格式的图像上方。
我希望texture_content被翻转,并采用BGRA格式。
如何在不使用Image.transpose
和numpy
交换颜色通道的情况下直接执行此操作?
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)