我正在尝试编写一个应用程序,可以转换用户照片库中的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
就足够了。
有没有办法知道在提交编辑时实际保存到用户照片库中的内容?
1条答案
按热度按时间7kqas0il1#
每次您使用
UIImage
或CIImage
加载RAW图像时,图像都会“显影”为RGB像素数据。即使您使用CIRAWFilter
,该滤镜的outputImage
也将是16位浮点(默认)RGBA图像,因为这是Core Image的工作格式。您只能使用CIRAWFilter
更改RAW的显影方式。结果是一个 * 新 * 图像存在内存中。它不会自动替换原始RAW图像。为了实际覆盖用户库中的原始图像,您需要使用content editing APIs from PhotoKit。即使这样,也没有办法再次将图像存储为RAW,因为它现在已经开发出来以便进行编辑。
我不知道有任何API可以用你描述的方式操作实际的RAW数据--当然不是用Core Image。