问题描述
根据 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 属性中定义的。