【问题标题】:Can you save an edited RAW .dng file on iOS?您可以在 iOS 上保存编辑后的 ​​RAW .dng 文件吗?
【发布时间】:2017-01-22 15:37:55
【问题描述】:

我想构建一个 iOS 10 应用程序,让您拍摄 RAW (.dng) 图像,对其进行编辑,然后将编辑后的 ​​.dng 文件保存到相机胶卷。通过结合来自 Apple 2016 年“AVCamManual”和“RawExpose”示例应用程序的代码,我已经达到了一个包含 RAW 图像的 CIFilter 以及编辑。

但是,我不知道如何将生成的CIImage 作为.dng 文件保存到相机胶卷中。这可能吗?

【问题讨论】:

    标签: ios ios10 cifilter dng


    【解决方案1】:

    RAW 文件是直接从相机传感器输出的“原始”文件,因此获取它的唯一方法是直接从相机中获取。处理完 RAW 文件后,根据定义,您所拥有的不再是“原始”文件,因此您无法返回 RAW。

    扩展比喻presented at WWDC where they introduced RAW photography... RAW 文件就像蛋糕的配料。当您使用 Core Image 从 RAW 文件创建可视图像时,您就是在烤蛋糕。 (如前所述,有许多不同的方法可以用相同的原料烘焙蛋糕,这与处理 RAW 的可能选项相对应。)但是你不能取消烘焙蛋糕——没有办法回到原来的原料,更不用说一种以某种方式保留处理结果的方法。

    因此,存储从 RAW 原件处理的图像的唯一方法是以位图图像格式保存处理后的图像。 (如果您不介意有损压缩,请使用 JPEG,如果您需要无损压缩,请使用 PNG 或 TIFF 等)

    如果您将编辑结果写入PHPhotoLibrary,请使用 JPEG(如果您愿意,可以使用高质量/压缩较少),“照片”会将您的编辑结果存储为派生结果,允许用户恢复为 RAW原版的。您还可以描述您在 PHAdjustmentData 中应用的一组过滤器,并与您的编辑一起保存 - 使用调整数据,您的应用程序(或照片应用程序扩展)的另一个实例可以使用原始 RAW 数据和您保存的过滤器设置重建编辑,然后允许用户更改过滤器参数以创建不同的处理图像。


    注意:有一个名为Linear DNG 的 DNG 格式版本支持非 RAW(或“不是很 RAW”)图像,但在实践中相当罕见,而且 Apple 的成像堆栈不支持它。

    【讨论】:

    • 有点像我想的那样。像 Lightroom 这样的应用程序必须绕过 Core Image 并使用自己的方法直接对文件进行 RAW 文件操作。这是将图像以 JPEG 格式写入 PHPhotoLibrary 的一个很好的提示,谢谢!
    • Lightroom 等也无法取消烘焙蛋糕。当他们拍摄 RAW 文件并保存 DNG 时,他们所做的是保存原始 RAW 数据(可能是特定于相机的文件格式,如佳能或尼康 RAW),以及描述您的 RAW 处理设置的元数据,以及(通常)将处理结果的 JPEG 预览转换为可以保存所有这些内容的通用文件格式。原始 RAW 数据保持不变,只是重新打包到另一个文件中,其中还包含其他数据。
    【解决方案2】:

    很遗憾,Apple 的 ImageIO 框架不支持将 DNG 作为输出格式。有关支持的输出类型列表,请参阅 CGImageDestinationCopyTypeIdentifiers() 的输出:

    (
        "public.jpeg",
        "public.png",
        "com.compuserve.gif",
        "public.tiff",
        "public.jpeg-2000",
        "com.microsoft.ico",
        "com.microsoft.bmp",
        "com.apple.icns",
        "com.adobe.photoshop-image",
        "com.adobe.pdf",
        "com.truevision.tga-image",
        "com.sgi.sgi-image",
        "com.ilm.openexr-image",
        "public.pbm",
        "public.pvr",
        "org.khronos.astc",
        "org.khronos.ktx",
        "com.microsoft.dds",
        "com.apple.rjpeg"
    )
    

    【讨论】:

    • 在我提交了一份关于 ImageI/O 框架中 RAW 输出支持的雷达之后就看到了这一点。由于缺乏支持,我什至无法编辑我试图实现的 RAW 的 EXIF 和 Geotag 数据。
    【解决方案3】:

    这个答案来晚了,但它可能会帮助其他人解决问题。这就是我将原始照片作为 .dng 文件保存到相机胶卷的方式。

    请注意,我使用带有 AVFoundation 的相机拍摄了这张照片。

     import Photos
     import AVFoundation 
    
     //reading in the photo data in as a data object
     let photoData = AVCapturePhotoOutput.dngPhotoDataRepresentation(forRawSampleBuffer: sampleBuffer, previewPhotoSampleBuffer: previewPhotoSampleBuffer)
    
     // put it into a temporary file
     let temporaryDNGFileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("temp.dng")!     
     try! photoData?.write(to: temporaryDNGFileURL)
    
     // get access to photo library
     PHPhotoLibrary.requestAuthorization { status in
                if status == .authorized {
    
                    // Perform changes to the library
                    PHPhotoLibrary.shared().performChanges({
    
                        let options = PHAssetResourceCreationOptions()
                        options.shouldMoveFile = true
    
                        //Write Raw:
                        PHAssetCreationRequest.forAsset().addResource(with: .photo, fileURL: temporaryDNGFileURL, options: options)
    
                        }, completionHandler: { success, error in
                            if let error = error { print(error) }
                    })
    
                }
                else { print("cant access photo album") }
    }
    

    希望对你有帮助。

    【讨论】:

    • 正如问题所问,这不会在保存之前编辑照片。
    【解决方案4】:

    在撰写此响应(iOS 10.1)时获取 DNG 数据的唯一方法是:

    AVCapturePhotoOutput.dngPhotoDataRepresentation(forRawSampleBuffer: CMSampleBuffer, previewPhotoSampleBuffer: CMSampleBuffer?) 
    

    注意 OP 指的是 Core Image。正如 rickster 所提到的,CI 处理处理后的图像数据,因此只提供处理后的图像结果(JPEG、TIFF):

    CIContext.writeJPEGRepresentation(of:to:colorSpace:options:)
    CIContext.writeTIFFRepresentation(of:to:format:colorSpace:options:)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2013-07-31
      • 1970-01-01
      • 2017-06-30
      • 2013-07-21
      相关资源
      最近更新 更多