不知道你在使用 iPhone 的时候有没有注意到一个现象:拍好的照片在相册里看的时候很亮,但一发到朋友圈,画面似乎立刻就「黯淡」了不少。而在刷 Instagram 之类平台的时候,时间线里又不时会闪现一些特别亮的照片,在昏暗的环境甚至有点「闪瞎眼」的感觉。
其实,这些现象都是对 HDR(高动态范围)照片的不同支持情况导致的。通俗地说,HDR 照片就是那些记录了更广泛明暗信息的照片,因此亮部会比普通照片看起来更明亮。然而,要正确显示 HDR 照片,拍摄、存储、读取和显示环节都要满足一定条件:相机要能记录更广的明暗范围,图片格式要能准确保留记录的亮度信息,操作系统和应用程序都要能识别图片中记录的 HDR 信息,而显示器在硬件上要支持高亮度。
这篇文章中,我们就来聊聊 HDR 照片显示要克服的这些「重重障碍」,以及苹果是如何通过软硬件功能试图克服这些障碍的。
拍摄环节
既然要显示 HDR 照片,那能拍出来才是能显示的前提条件。所以在开始一切的话题之前,我们快速回顾一下 HDR 照片是怎么拍出来的。
当我们按下快门的时候,相机传感器只会很短时间内接收光线。至于这「一刻」到底有多长,就取决于「曝光时间」和「快门速度」了,不少手机和相机的专业模式也都能调整这个参数。这时间内传感器积累到的光,最终转化为电信号,从而生成图像。
不过相机传感器记录范围是有限的,传感器的动态范围完全取决于它自己的性能。在把光转换成电荷时,每个像素都有一定的容量限制(如上图的管子一样)。如果光线太亮,会溢出管子,就形成了过曝——超出容量的光线信息无法记录下来。相反,如果光线太暗,生成的电荷可能无法超过传感器上的噪声,导致欠曝,同样无法有效记录光线信息。
换句话说,假如一个场景明暗差异超过了传感器的性能,传感器不仅可能丢失高亮处的信息,也可能丢失阴影处的细节。
而 HDR 合成照片,则是在拍摄单张照片的基础上,在短时间内连续拍摄多张照片,再通过算法合成为一张。这些照片的明暗程度各异,目的在于尽可能囊括场景中从暗至亮的细节,以便算法能够完整提取。
存储和读取环节
能拍 HDR 照片了,第二步就是要解决怎么存的问题。在 iOS 中,HDR 照片的背后其实有两张图:一张是普通的标准动态范围(SDR)照片;另一张是「增益图」(gain map),其中存储了原始图片的亮度和曝光数据。将这两张图叠加起来,用增益图对 SDR 照片做像素级的控制,就得到了 HDR 图像。
把拍摄的照片用 Adobe 开发的 Gain Map Demo App 打开,就可以清晰地看到图片的 SDR/HDR 属性以及对应区域的直方图。
2022 年,苹果还把这套方案交给了国际标准化组织 ISO,后者以此为基础制定了 HDR 照片相关规范 (ISO/TS 22028-5:2023)。
总的来说,这种存储方式的好处在于兼容性强:如果读取照片的应用不支持 HDR,那么只读取 SDR 照片即可。但换个角度说,这也给很多开发商偷懒提供了动机:像绿色应用背后的大厂日理万机,本着能用就行的态度,迟迟提不起兴趣做适配,也是可以理解的。
而在今年的 iOS 18 中,苹果进一步引入了「自适应 HDR」(Adaptive HDR)的概念,进一步提高了增益图的精度和兼容性(例如可以从 HDR 照片反向产出 SDR 版本了),我们也可以期待开发者借此更好地为用户捕获和展示 HDR 内容。