Если у вас im.mode
, изначально равный F
, вы можете заставить Pillow перезагружать одни и те же данные в другом режиме (действительно, очень необычное желание) таким хакерским способом:
imnew = im.convert(mode='I')
imnew.frombytes(im.tobytes())
В более общем смысле (вне контекста PIL), всякий раз, когда вы сталкиваетесь с необходимостью иметь дело с необработанным представлением памяти в Python, вы обычно должны полагаться на numpy
или встроенный в Python класс memoryview
с struct
module.
Вот пример повторной интерпретации массива numpy float32
как int32
:
a = np.array([1.0, 2.0, 3.0], dtype='float32')
a_as_int32 = a.view('int32')
Вот пример того же действия с использованием memoryview
:
# Create a memory buffer
b = bytearray(4*3)
# Write three floats
struct.pack_into('fff', b, 0, *[1.0, 2.0, 3.0])
# View the same memory as three ints
mem_as_ints = memoryview(b).cast('I')