如何在iOS上使用CoreImage/CoreGraphics调整RAW照片的大小

jhdbpxl9  于 2023-02-26  发布在  iOS
关注(0)|答案(1)|浏览(205)

我正在尝试编写一个应用程序,可以转换用户照片库中的RAW照片。这个应用程序的用途是对使用变形透镜拍摄的照片进行去压缩,但任务只是沿着水平轴非比例地缩放图像。
我目前必须完成的代码是:

let sourceImage = CIImage(image: UIImage(named: "rawSource.DNG")!)!
let transformFilter = CIFilter.lanczosScaleTransform()
transformFilter.inputImage = sourceImage
transformFilter.scale = 1
transformFilter.aspectRatio = 1.5
let image = UIImage(ciImage: transformFilter.outputImage!)

这有效地将图像水平拉伸到原始宽度的150%。然而,我不清楚的是,在引擎盖下发生了什么:CoreImage实际上是在修改原始的DNG RAW文件并向其中插入额外的像素数据吗?还是先将RAW文件转换为JPG(或其他)格式,然后再将转换应用于该JPG?我的目标是修改原始的RAW文件,但我怀疑它可能只是在修改它的JPG表示形式。
我看到还有一个CIRawFilter似乎是专门用于修改RAW照片数据的,但我不清楚这是一个简单的转换所必需的,还是使用上述方法来转换从RAW文件创建的CIImage就足够了。
有没有办法知道在提交编辑时实际保存到用户照片库中的内容?

7kqas0il

7kqas0il1#

每次您使用UIImageCIImage加载RAW图像时,图像都会“显影”为RGB像素数据。即使您使用CIRAWFilter,该滤镜的outputImage也将是16位浮点(默认)RGBA图像,因为这是Core Image的工作格式。您只能使用CIRAWFilter更改RAW的显影方式。
结果是一个 * 新 * 图像存在内存中。它不会自动替换原始RAW图像。为了实际覆盖用户库中的原始图像,您需要使用content editing APIs from PhotoKit。即使这样,也没有办法再次将图像存储为RAW,因为它现在已经开发出来以便进行编辑。
我不知道有任何API可以用你描述的方式操作实际的RAW数据--当然不是用Core Image。

相关问题