# APNG IDAT/fdAT 分块流式 deflate 回放与 dispose 方法帧时序分析器

上传 PNG/APNG，解析动画结构：PNG 签名与逐块 CRC32 校验、IHDR（位深/颜色类型/隔行）、acTL（帧数与播放次数，必须位于首个 IDAT 之前）、fcTL（序号、区域约束 x+y+w+h ≤ 画布、delay_num/delay_den 归一化、dispose_op none/background/previous、blend_op source/over）、IDAT 首帧 + fdAT 后续帧；共享的 fcTL+fdAT 序号必须从 0 连续递增；逐帧回放 deflate 流并核对解压尺寸 = 高 × (1 + 每行字节数)，报告 zlib 损坏；dispose 语义模拟提示首帧 previous 视作 background、零延迟帧等。

> 标准页面: https://elysiatools.com/zh/tools/apng-idat-fdat-chunk-streaming-deflate-replay-and-disposal-method-analyzer

- **分类:** Compression

- **关键词:** APNG, 动画 PNG, fcTL, fdAT, acTL, 销毁操作, 混合操作, PNG 块, CRC32, deflate 回放, 帧时序

## 概述

实现遵循 Mozilla 社区 APNG 规范：acTL 必须出现在任何 IDAT 之前且 num_frames 必须等于 fcTL 数量（0 无效）；每个帧恰好一个 fcTL，默认图像作首帧时其 fcTL 必须位于首个 IDAT 之前且区域为全画布 (0,0,W,H)；fcTL 与 fdAT 共享同一序号空间，从 0 起连续无重复，乱序按错误处理；delay_den 为 0 视为 100（即百分之秒），delay_num 为 0 表示尽快渲染下一帧；首帧 dispose_op=previous 按规范视作 background。每帧的压缩流是帧内全部 IDAT（或 fdAT，剥去 4 字节序号）的拼接，解压结果须为 h×(1+ceil(w×bpp/8))（含每扫描行滤波字节）。逐块 CRC32 与 zlib 完整性独立报告，输出帧表、时长/帧率、压缩比、chunk 直方图与 dispose/blend 语义审计。

## 输入项

- **PNG / APNG 文件（≤20MB）** (file): sample-apng-3frame.png
- **回放并校验 IDAT/fdAT deflate 流** (checkbox)

## 适用场景

- 排查 APNG 动图在特定浏览器或客户端中播放异常、卡顿、撕裂或渲染残影时
- 编写或测试 APNG 编码器与解包工具时，需要验证块排列顺序、序号连续性与 CRC32 正确性
- 审核动图的帧时序参数、循环设置、单帧局部渲染区域以及 deflate 压缩流完整性

## 工作原理

- 解析 PNG 文件签名，遍历并校验所有数据块（如 IHDR、acTL、fcTL、IDAT、fdAT、IEND）的结构与 CRC32 校验码
- 检查规范约束：确保 acTL 位于首个 IDAT 之前，统计帧数与循环次数，并验证 fcTL 与 fdAT 共享序列号自 0 开始连续递增
- 提取各帧的渲染区域（x, y, w, h）、帧延迟（delay_num/delay_den）及 dispose_op/blend_op 语义操作
- 可选启用 deflate 流回放，将每帧的 IDAT/fdAT 数据拼接并解压，精确核对解压后像素与扫描行滤波字节的总尺寸

## 使用案例

- 前端工程师排查动图在 iOS Safari 或 Android WebView 中出现的帧渲染闪烁与残影问题
- 游戏及应用 UI 动效设计师检验导出的 APNG 资源是否包含多余空白帧或异常的时钟延迟
- 图形引擎开发者使用损坏的测试用例验证图像解码器的容错与边界校验逻辑

## 常见问题

### 首帧的 dispose_op 为 previous 时为什么会被提示？

根据 APNG 规范，首帧不存在先前的缓冲区状态，因此渲染器必须将其强制视作 background 操作处理。

### delay_den 为 0 会发生什么？

规范规定当分母 delay_den 为 0 时，应将其归一化为 100（即以百分之一秒为单位计算延迟）。

### 为什么 fcTL 和 fdAT 的序列号会出现连续性错误？

APNG 规定动画流中的所有 fcTL 与 fdAT 共享同一个自 0 开始单调递增且不能断号的序列号计数器，任何乱序或缺口都属于格式错误。

### 勾选“回放并校验 IDAT/fdAT deflate 流”有什么作用？

它会剥离 fdAT 的 4 字节序号并拼接压缩数据进行 zlib 解压，检查数据流是否损坏以及解压字节数是否与帧宽高精确匹配。

### 文件上传有大小限制吗？数据是否安全？

单文件最大支持 20MB。所有解析与解压均在本地内存中完成，不会留存或泄露您的图像数据。

## 相关工具

- [图片配色提取器](https://elysiatools.com/zh/tools/image-color-palette-extractor): 上传图片后提取主色调，导出代码可用的色板片段，并检查对比度
- [NSFW图片内容检测器](https://elysiatools.com/zh/tools/nsfw-image-detector): 基于NSFWJS和图像特征的AI内容审核工具，标记上传图片是否含不适宜内容。面向内容审核与合规自查场景，仅分析您上传的文件，不是图片搜索或发现工具。支持GIF/Animated WebP/APNG和JPEG/PNG/WEBP。
- [图片批量转 WebP](https://elysiatools.com/zh/tools/image-to-webp-batch-converter): 批量将图片或 ZIP 压缩包中的图片转换为 WebP，并返回 ZIP 下载包
- [JPEG转PNG](https://elysiatools.com/zh/tools/jpg-to-png): 将JPEG图像转换为PNG格式，支持透明度和无损压缩
- [PNG转8位PNG](https://elysiatools.com/zh/tools/png-to-8bit-png): 将PNG图像转换为8位颜色深度，获得更小的文件大小和更好的兼容性
- [PNG转AVIF](https://elysiatools.com/zh/tools/png-to-avif): 将PNG图像转换为AVIF格式，具有下一代压缩和卓越的质量大小比
- [PNG转优化PNG](https://elysiatools.com/zh/tools/png-to-optimized-png): 将PNG图像转换为优化的PNG格式，使用高级压缩设置和质量保持
- [PNG转TIFF](https://elysiatools.com/zh/tools/png-to-tiff): 将PNG图像转换为TIFF格式，提供压缩选项和高质量保存

## 示例

- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [PNG示例](https://elysiatools.com/zh/samples/png-samples): 不同宽高比和分辨率的PNG图像示例
- [PNG 查看器样本](https://elysiatools.com/zh/samples/png-viewer-samples): 用于浏览器内 PNG 查看器的样本图像
- [Web Go 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-go): Web Go 图像处理示例，包括图像读写、图像缩放和格式转换
