1
我開始使用枕頭image-processing
,我需要使用單獨的像素。通過枕頭的Image.frombytes創建的圖像不同於預期
最後我想從字節創建圖像。因此我使用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)
和輸出:
initial_data: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
data_loaded: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
is initial and loaded data equal: True
==============================
initial_data: b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
data_loaded: b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'
is initial and loaded data equal: True
==============================
initial_data: b'\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff'
data_loaded: b'\xda\x11\x07\xff\xe2\xe3\xf4\xfd\xff\xe0\xff\xff'
is initial and loaded data equal: False
==============================
initial_data: b'\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
data_loaded: b'\xda\x11\x07E\x00\x00\x00\x05\x16\x00\n\x1e'
is initial and loaded data equal: False
==============================
當我檢查創建的文件,有一個紅色像素和三個白色/黑色像素的圖像看起來像從紅色到白色或黑色漸變。 爲什麼來自不同顏色文件的像素與預期不同?