在 macOS 上使用 Core Image 获取 RAW 图像大小的正确方法是什么

问题描述

根据 Core Image 文档,以下 API 应返回原始图像的原始输出大小。

let filter = CIFilter(imageURL: url,options: nil)
let value = filter.value(forKey: CIRAWFilterOption.outputNativeSize.rawValue ) as? CIVector

然而,这似乎总是返回相机的原始分辨率,而不是包含在 RAW 文件中的实际图像大小。

例如,如果我在 Sony 19 上以 16:9 纵横比拍摄的 RAW 文件上使用此 API,则图像大小应为 6000 x 3376,但此 API 调用返回 6000 x 4000。

这是一个错误还是我遗漏了什么 - 是否有另一个 API 调用获取实际图像大小?

请注意,EXIF 数据确实包含正确的图像大小。

解决方法

好吧,似乎相机存储了使用相机纵横比设置生成的缩略图图像,但 RAW 文件仍包含完整图像,即相机本机传感器尺寸。

使用 macOS QuickLook 缩略图生成器时,您会返回相机生成的缩略图,该缩略图被裁剪为当时设置的任何纵横比。

但是,当使用 CIFilter 获取 RAW CIImage 时,您将获得完整的未裁剪图像。如果您使用 CIFilter 查询图像大小,您还将获得完整的图像大小。

看起来裁剪的图像大小是在 EXIF XDimension 和 YDimension 属性中定义的。