category
AI summary
tags
password
summary
date
icon
status
字数统计
type
slug
orgsrc
URL
在上一篇文章里,我们从 visionOS 模拟器运行时中提取出空间照片(Spatial Photo)的原始文件, 本文尝试解析这一文件格式,并尝试将两张普通的视差图像合并成一张空间照片。
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 格式的照片
相比 JPEG,HEIF 能够在保持同等视觉质量的前提下使文件大小减小50%。它支持10位色深、高动态范围、包含 透明度 Alpha 通道等特性:
读写 HEIC 文件
HEIF 作为一种容器格式,它可以包含以不同格式编码的静态图像和图像序列,其中使用 HEVC 作为图像内容编码格式的变体,称为 HEIC(后缀名为
.HEIC
):苹果在 WWDC2017 中专门介绍了由 JPEG 转向 HEIF 的原因和细节:
通过一些图像处理程序库,我们可以对 HEIC 文件进行读写操作:读取文件中的元数据信息、将 JPEG 图片转换成 HEIC 。我们使用 Python 图像处理库 Pillow 的 HEIF 插件:
读取
.HEIC
文件,可以看到空间照片是由两张 HEIF 图像序列(Image-Sequence)组成:两张图像分别是左右视差图像:
其中任意一张图像的
info
都保存了图像的元数据: 格式化后的 XMP 数据标签如下,可以从中读取苹果的命名信息:
- SpatialMedia,version=0.3
- 创建工具:SpatialMediaIO
如果将读入的原始文件重新导出一份,虽然仍可以保存为
.HEIC
格式,但部分元数据会缺失,再次导入 Apple Vision Pro 模拟器,将无法被正确识别为空间照片:与原始空间图片相比,缺失的信息是元数据中的
HEIC
数据,具体如下:总结
Apple Vision Pro 支持的空间照片是以 HEIF 格式存储的图像序列(两张左右视差图像),这也是 iPhone 自 2017 年开始采用的照片格式;可以使用通用处理软件读取、解析空间照片文件,但是如果要自己创建空间照片格式,还缺少必要的元数据信息,只能期待后续 iOS 17 在 iPhone 15 Pro 系列上的更新:
参考
- High Efficiency Image File Format | Wikipedia
- HEIF Technical information | https://nokiatech.github.io/heif/technical.html
- High Efficiency Image File Format | WWDC2017-513
- 作者:V2XR
- 链接:https://hackvision.pro/post/apple-vision-pro-spatial-photo-file-format
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。