def _channels_data_to_image(channels_data, mode, size, depth): if size == (0, 0): return num_channels = mode.length assert depth == 8 assert len(channels_data) == num_channels total_size = size[0] * size[1] * num_channels image_bytes = array.array(str("B"), [0] * total_size) for index, channel in enumerate(channels_data): data = channel.data # zip and zip-with-prediction data is already decoded if channel.compression == Compression.PACK_BITS: data = packbits.decode(data) image_bytes[index::num_channels] = array.array(str("B"), data) pixels = get_pixel_array(image_bytes, size[0], size[1], mode.length) return Image(pixels, mode)