def compress_rle(fd, # type: BinaryIO
image, # type: np.ndarray
depth, # type: int
version # type: int
): # type: (...) -> None
"""
Write a Numpy array to a run length encoded stream.
{}
"""
if depth == 1: # pragma: no cover
raise ValueError(
"rle compression is not supported for 1-bit images")
start = fd.tell()
if version == 1:
fd.seek(image.shape[0] * 2, 1)
lengths = np.empty((len(image),), dtype='>u2')
else:
fd.seek(image.shape[0] * 4, 1)
lengths = np.empty((len(image),), dtype='>u4')
if util.needs_byteswap(image):
for i, row in enumerate(image):
row = util.do_byteswap(row)
packed = packbits.encode(row)
lengths[i] = len(packed)
fd.write(packed)
else:
for i, row in enumerate(image):
packed = packbits.encode(row)
lengths[i] = len(packed)
fd.write(packed)
end = fd.tell()
fd.seek(start)
fd.write(lengths.tobytes())
fd.seek(end)
评论列表
文章目录