def write_idat_with_flag(encoded_flag, original_image_file_name, outfile):
reader = png.Reader(filename=original_image_file_name)
width, height, pixels, meta = reader.read()
if height != len(encoded_flag):
raise Exception(f"Encoded flag length {len(encoded_flag)} is not equal to height {height}")
scanlines = list(pixels)
filtered_scanlines = []
for i in range(0, height):
filtered_scanlines.append(
png.filter_scanline(encoded_flag[i], scanlines[i], meta['planes'], scanlines[i - 1] if i > 0 else None))
compressed = zlib.compress(b''.join(filtered_scanlines))
png.write_chunk(outfile, b'IDAT', compressed)
评论列表
文章目录