在 BBSMC 下整合包浏览图片的间隙时,我偶然注意到有些图片的加载方式不太寻常。
与我们习以为常的逐行扫描不同,它并非从上到下一行一行刷新,也没有先模糊再清晰的过渡。它是从一幅稀疏的点阵图开始,像无数颗种子同时发芽、四周分叉、蔓延,逐渐交织成网。那种视觉节奏既像水渍在纸面上缓慢洇开,又带着几分早期液晶屏接触故障的错觉。
那画面太独特了,以至于我停下手头的操作,反复刷新了几次确认自己没有看错。传统的图片加载是“一维”的,一根线一根线地往下走;但眼前这个过程是“二维”的,从整齐排布的稀疏像素同时向四周扩散。
这一下就勾起了我的好奇。

💡 右键图片在新标签页打开,F12 打开开发者工具,在网络面板禁用缓存并限制网速(如 3G),刷新页面即可复现这种加载效果。
确认身份
这种点阵扩散的加载效果,自带一种复古的 ASCII 字符动画质感。第一印象太有极客味了,以至于我最初误以为是 BBSMC 前端自己手搓的某种 Canvas 渐进渲染特效。
但 F12 并没有找到什么特别的,只是一张普普通通的 PNG 图片,单独打开也有这种效果。顺藤摸瓜搜了一下,才发现这根本不是什么现代前端的实验性玩法,而是一个诞生近三十年的老算法:Adam7。
它是 PNG 1.0 规范中定义的多通道交错(Interlace)方案。要验证一张图片是否启用了 Adam7,不需要借助专业软件,直接读取文件的二进制头部即可。
PNG 的结构非常规整,紧跟在 8 字节文件签名之后的是 IHDR 数据块,它固定包含 13 个字节的图像基础信息。其中最后一个字节,也就是整个文件的第 29 个字节(数组索引 28),专门用于标记交错方式:
0代表非交错1代表 Adam7 交错
💡 关于 PNG 数据块的详细布局,推荐参考这篇解析:PNG文件结构深度解析之文件头与数据块
在 Windows 环境下,一行 PowerShell 就能让它现出原形:
[System.IO.File]::ReadAllBytes("图片路径")[28]果不其然,终端返回了一个干脆的 1。身份确认,就是 Adam7。
但这反而引出了一个更大的疑问:既然它是 PNG 官方规范里白纸黑字写着的标准特性,为什么在当下的 Web 开发中,我几乎从来没听说过它?
追问:为什么它没有普及?
PNG 1.0 规范是 1996 年定稿,Adam7 作为内置的交错方案,随标准一同诞生。30 年过去了,它仍然是一个“标准中有、现实中几乎见不到”的奇特的存在状态。
更吊诡的是,它的设计思路其实非常超前。用一个简化的版本来理解它的 7 遍扫描:
- 第 1 遍:只传 1/64 的像素(全图 8×8 网格的左上角),瞬间出图
- 第 2 遍:补上另外 1/64(8×8 网格的横向偏移位)
- ……
- 第 7 遍:补齐剩余的全部像素
💡 具体的直观解释推荐先实操观察文章前面的那张示例图,然后看这篇文章:图像隔行扫描算法——Adam7
七次扫描,层层填充。用户不需要等整张图下载完,就能先看到一个包含全貌的稀疏点阵。这种“先给概貌,再补细节”的策略,不就是今天所有渐进式加载方案追求的核心能力吗?
一个在 90 年代就写入标准的技术,理念如此接近今天的“渐进式加载”,为什么几乎没人用,甚至连专门的文档都寥寥无几?
多维归因:四条绞索
一、生不逢时:来得太早,成得太晚
一个思路如此超前的方案,为什么会在漫长的岁月里默默无闻?
Adam7 随 PNG 1.0 亮相的 1996 年,主流网络环境仍停留在 56K 拨号阶段。在那个几十KB的图片都要加载半天的年代,浏览器厂商根本没有余力去优化一个“锦上添花”的渐进式解码器。那个年代的 Web 设计哲学也极其务实:尽可能压缩体积,能不用图就不用图。让加载过程“更优雅”并不是优先级事项。
时间推移到 2010 年前后,带宽终于不再是瓶颈,渐进式加载的价值开始显现。但 Adam7 并没有等来属于自己的窗口期,反而迎面撞上了新格式的降维打击。2010年 Google 推出 WebP,2018年 AVIF 问世,这些基于视频编码技术的新格式不仅自带更高效的渐进式解码,还用碾压级的压缩率直接把 PNG 挤下了主流舞台。
新格式不仅解决了加载体验的问题,更用碾压级的压缩效率动摇了 PNG 本身的地位。当宿主格式的市场份额开始收缩,作为可选特性的 Adam7 自然再无出头之日。更关键的是,WebP 和 AVIF 的渐进策略走的是频域路线,先呈现低频轮廓再逐步叠加高频细节,视觉上是平滑的模糊到清晰。而 Adam7 依赖的是空域像素的直接采样,两者在底层逻辑上已经分道扬镳。
二、技术硬伤:体积与性能的双重账单
就算生不逢时,如果自身底子够硬,或许还能在特定领域苟延残喘。但遗憾的是,Adam7 在工程实现上有着无法回避的硬伤。
PNG 之所以备受青睐,很大程度上归功于 DEFLATE 算法极高的无损压缩率。这种算法高度依赖空间局部性,也就是相邻像素的值越接近,压缩率越高。Adam7 的交错机制将原本连续的像素强行拆散到不同的扫描遍数中,彻底破坏了这种连续性。这就导致同一张图片,一旦开启交错,文件体积通常会膨胀 10% 到 30%。
体积增加只是显性成本,隐性的计算开销同样不容忽视。解码端需要执行七次独立的反滤波与上采样合成才能重建完整图像,在单线程或算力受限的环境中,解码耗时几乎成倍增长。编码端也需要额外维护子图像的缓存与重排逻辑,处理时间同步拉长。
在按 KB 计费的拨号时代,多出两三成的体积是致命的。即便放到今天,面对移动端首屏性能指标和 CDN 带宽成本来说也是一笔不小的账单。
三、用户认知:模糊渐变 vs 故障点阵
技术账算不过来,那用户体验呢?这或许是 Adam7 最容易被忽视,却也最致命的软肋。
无论是传统的逐行扫描,还是 JPEG、WebP 的渐进式加载,给用户的视觉反馈都是“从模糊逐渐走向清晰”。这非常符合人类视觉系统“格式塔补全”的本能。大脑能够顺畅地将这种变化解读为“正在加载”,等待过程因此变得可预期。
Adam7 的呈现方式则完全不同。它不提供模糊的过渡,它呈现的却是“点阵扩散直至填满”。在采样密度较低的早期阶段,画面呈现为规则却稀疏的像素网格。普通用户的第一反应大概率不是“图还没加载完”,而是“这图是不是坏了”。
在视觉认知中,马赛克状的硬性填充与信号丢失、显卡花屏等故障共享着相同的特征。Adam7 在工程逻辑上实现了优雅的渐进,但在人类感知层面,它却是一堆可疑的噪点。这种设计初衷与实际体验的背离,进一步削弱了它在产品侧的吸引力。
四、生态叠加:负向死循环
体积更大、性能更差、视觉反馈还容易引起误解,当这些缺陷叠加在一起,整个开发生态自然会用脚投票,形成一个牢不可破的负向循环:
循环推演到极致,就从“不推荐使用”变成了“直接拉黑”。许多知名的开源项目甚至明确放弃了对它的支持。比如累计下载量破十亿的 react-pdf,曾有一条关于隔行 PNG 渲染异常的 issue 挂了将近七年才被真正关闭。那并不是什么卡了七年的技术难题,而是一个根本没人在乎的问题等了七年。
如果你去翻阅 2010 年之后几年的技术论坛,会发现一个很有趣的现象:关于 JPEG 渐进式方案的讨论,正反方还能吵得有来有回;但提及 PNG 的 Adam7 隔行扫描,社区的答案却出奇地一致,就两个字:“别用”。没有权衡,没有妥协,一个在十几年前就被集体宣判死刑的技术,自然不会再有文档更新和问题修复。它在 PNG 规范中静静躺了近三十年,最终成为了一种理论上的存在。
祛魅与重新定位
所以,Adam7 是一项“失败的技术”吗?
如果以市场占有率和工程落地来衡量,答案几乎是肯定的,它近乎完败。没有流行、没有成为标准实践、没有在任何主流场景中被默认开启。它甚至没有经历完整的“兴起、竞争、替代”的过场,更甚至都没来得及被竞争对手正面击败,在对手出现之前,就已经被时代本身忽视了,
诞生时,互联网需要的是兼顾加载体验与带宽控制的方案。但它提升的体验微乎其微,带宽成本反而增加,“确实是个天才般的思路,但我还是用压缩率更高的格式吧”。过了几年,JPEG 的渐进式加载来了,凭借着更高的压缩效率、更符合直觉的视觉过渡,以及天然就是照片常用的格式,迅速占据了生态位,更没 Adam7 什么事了。替代?要先被广泛使用,才有“替代”这一说。
但如果换一个坐标系呢?
今天我们已经习以为常的各种渐进式加载策略,无论是 JPEG 的多遍扫描、WebP 的增量解码,还是 LQIP 占位图与 Blurhash 的模糊哈希,所有这些方案的核心思想都是:先让用户看到点内容,再逐步丰富细节。这种“用时间换感知”的设计哲学,Adam7 在 1996 年就完整实现了。
它确实不够完美。太贵,太重,太不合时宜,视觉过渡不够自然。但在那个网速以秒计量的年代,它率先回答了“等待该如何被感知”这个问题。它向后来的开发者证明了一件事:用户可以接受等待,只要等待的过程不是一片空白。
Adam7 留下的真正遗产,并非那七遍扫描的具体顺序,也不是交错标志位的二进制定义。它是一种范式,一种从“图到了才显示”到“没到的部分也能传递信息”的范式。今天的骨架屏、流式渲染、低清占位图,在代码实现上与它毫无关联,但在体验设计的脉络上,它们走在同一条路上。
那么……
一个几乎被遗忘的交错标准,在自身未能普及的同时,却为后代技术播下了思想的种子。
技术演进中类似的轨迹并不罕见。初代 iPhone 取消物理键盘与可更换电池时,在当时被视为异类,如今却成了行业铁律;Google Wave 因为过于超前而黯然退场,却为后来的实时协作与流式通信铺平了道路;今年大热的多 Agent 协同架构,如果追溯其“自主感知环境并执行动作”的核心定义,早在上世纪末的 JADE 框架中就已具雏形。
当我们评价一项技术时,或许需要区分两件事:
“它在当下是否实用”,属于工程决策的范畴。 “它在历史上是否重要”,属于技术演进的判断。
前者决定生死,后者决定位置。而我们很容易将“当时没用”当成“从未产生价值”。
技术演进从来不是一条笔直的高速公路,更像是一棵不断向上生长的巨树。Adam7 就像是这棵树上最早长出、却也最早枯萎掉落的一片叶子。它没能熬过季节的更替,也没能留在任何一张主流视野的地图上。
但当你剥开今天那些先进方案的表皮,去探寻它们的根系时,你会发现,它们都在汲取着同一片土壤的养分。那片土壤的名字,叫作 “让等待的过程不再是一片空白”。
今天,所有的枝条都在朝着同一个方向倾斜。而 Adam7,曾是最早感知到那个方向的一片叶子。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时











