解析 Apple Vision Pro 空间图片格式
00 分钟
2023-10-16
2023-12-31
category
AI summary
tags
password
summary
date
icon
status
字数统计
type
slug
orgsrc
URL
在上一篇文章里,我们从 visionOS 模拟器运行时中提取出空间照片(Spatial Photo)的原始文件, 本文尝试解析这一文件格式,并尝试将两张普通的视差图像合并成一张空间照片。
notion image

HEIF 文件格式

HEIF 是指高效图像文件格式(High Efficiency Image File Format),它是一种现代图像文件格式,用于存储静态图像图像序列(例如 HDR 照片、Panoramas 全景照片等),由 Moving Picture Experts Group(MPEG)开发,作为 HEVC(高效视频编码,又称H.265)的补充。Apple 于 2017 年的 iOS 11 中首次采用 HEIF,取代了之前的JPEG格式。这大大减小了照片文件的大小,同时提高了质量。此后,HEIF 也用于 macOS 和其他平台。
你可以在 iPhone 相机设置中选择使用存储照片的格式:
  • 高效,即保存 HEIF 格式的照片
  • 兼容,即保存 JPEG 格式的照片
notion image
相比 JPEG,HEIF 能够在保持同等视觉质量的前提下使文件大小减小50%。它支持10位色深、高动态范围、包含 透明度 Alpha 通道等特性:
不同编码格式文件图像质量对比
不同编码格式文件图像质量对比

读写 HEIC 文件

HEIF 作为一种容器格式,它可以包含以不同格式编码的静态图像和图像序列,其中使用 HEVC 作为图像内容编码格式的变体,称为 HEIC(后缀名为 .HEIC):
HEIC 文件后缀名
HEIC 文件后缀名
苹果在 WWDC2017 中专门介绍了由 JPEG 转向 HEIF 的原因和细节:
WWDC2017 - Session 513
WWDC2017 - Session 513
通过一些图像处理程序库,我们可以对 HEIC 文件进行读写操作:读取文件中的元数据信息、将 JPEG 图片转换成 HEIC 。我们使用 Python 图像处理库 Pillow 的 HEIF 插件:
notion image
读取 .HEIC 文件,可以看到空间照片是由两张 HEIF 图像序列(Image-Sequence)组成:
notion image
两张图像分别是左右视差图像:
notion image
其中任意一张图像的 info 都保存了图像的元数据:
notion image
格式化后的 XMP 数据标签如下,可以从中读取苹果的命名信息:
  • SpatialMedia,version=0.3
  • 创建工具:SpatialMediaIO
notion image
如果将读入的原始文件重新导出一份,虽然仍可以保存为 .HEIC 格式,但部分元数据会缺失,再次导入 Apple Vision Pro 模拟器,将无法被正确识别为空间照片:
notion image
与原始空间图片相比,缺失的信息是元数据中的 HEIC 数据,具体如下:
notion image

总结

Apple Vision Pro 支持的空间照片是以 HEIF 格式存储的图像序列(两张左右视差图像),这也是 iPhone 自 2017 年开始采用的照片格式;可以使用通用处理软件读取、解析空间照片文件,但是如果要自己创建空间照片格式,还缺少必要的元数据信息,只能期待后续 iOS 17 在 iPhone 15 Pro 系列上的更新:
notion image

参考

  • High Efficiency Image File Format | Wikipedia
  • HEIF Technical information | https://nokiatech.github.io/heif/technical.html
  • High Efficiency Image File Format | WWDC2017-513