通过枕头创建的图像图像.frombytes与预期不同

2024-04-29 03:11:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始为image-processing使用Pillow,我需要处理单独的像素。在

最后,我想从字节创建图像。在

所以我使用PIL.Image.frombytes(mode, size, data, decoder_name='raw', *args)函数。在

你能告诉我什么是数据吗?在

我认为它应该是像R1G1B1R2G2B2R3G3B3…RnGnBn用于RGB模式的字节字符串。在

但我有点搞不清以下几点:

from PIL import Image

def image_create_load_compare(initial_data):
    img = Image.frombytes('RGB', (4, 1), initial_data)
    img.save("temp.jpg")

    img_loaded = Image.open("temp.jpg")
    data_loaded = img_loaded.tobytes()
    print("initial_data: " + str(initial_data))
    print("data_loaded:  " + str(data_loaded))
    print("is initial and loaded data equal: " + str(initial_data == data_loaded))
    print("="*30)

# 4 black pixels
black_bytes = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
image_create_load_compare(black_bytes)

# 4 white pixels
white_bytes = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
image_create_load_compare(white_bytes)

# 1 red pixel, 3 white pixels
red_white_bytes = b'\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff'
image_create_load_compare(red_white_bytes)

# 1 red pixel, 3 black pixels
red_black_bytes = b'\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
image_create_load_compare(red_black_bytes)

以及输出:

^{pr2}$

当我检查创建的文件时,有一个红色像素和三个白色/黑色像素的图像看起来像从红色到白色或黑色的渐变。 为什么不同颜色文件的像素与预期的不同?在


Tags: imagedatabytescreateloadred像素initial
1条回答
网友
1楼 · 发布于 2024-04-29 03:11:12

JPEG是一种有损格式。为了减小文件大小,它会改变像素的颜色,使它们更易于压缩。在

尝试以无损格式保存临时文件,如png。在

img.save("temp.png")

img_loaded = Image.open("temp.png")

现在您的测试应该全部输出True。在

^{pr2}$

相关问题 更多 >