我想知道在PNG图像中使用多个IDAT块的好处是什么。
PNG文档说明如下:
“可能有多个IDAT块;如果是这样,它们应该连续出现,没有其他插入的块。压缩数据流是所有IDAT块数据字段内容的串联”。
我不认为这是由于块内数据块的最大大小(2^32字节)。
PNG文档说明如下:
“可能有多个IDAT块;如果是这样,它们应该连续出现,没有其他插入的块。压缩数据流是所有IDAT块数据字段内容的串联”。
我不认为这是由于块内数据块的最大大小(2^32字节)。
看起来,在读取PNG文件时,即使文件中的IDAT块大小更大,libpng 限制其缓冲的数据块为8192字节。这对于libpng读取和解压IDAT块所需的分配大小设置了上限。然而,在完全读取整个IDAT块之前,仍然无法检测到校验和错误,而对于大型IDAT块,这可能需要更长时间。
假设您不关心CRC错误的早期检测(如果发生错误,它们仍然会被检测到,但稍后),那么小的IDAT块对读者没有任何好处。实际上,小的IDAT块意味着更多单独的zlib调用以及zlib中的更多前导/后导费用,因此在处理时间和磁盘空间方面通常效率较低。