首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将其他相机上的原始照片保存到iOS照片库

将其他相机上的原始照片保存到iOS照片库
EN

Stack Overflow用户
提问于 2017-02-02 17:35:58
回答 1查看 1.5K关注 0票数 2

我编写了一个应用程序,从我的理光GR II中读取dng文件,并将它们保存到iOS 10的照片库,代码如下

代码语言:javascript
运行
复制
let photoLibrary = PHPhotoLibrary.shared()
photoLibrary.performChanges({
    PHAssetChangeRequest.creationRequestForAsset(from: image)
}) { (success: Bool, error: Error?) -> Void in
    if success {
        print("Saving photo ok")
    } else {
        print("Error writing to photo library: \(error!.localizedDescription)")
    }
}

我得到了以下错误:

代码语言:javascript
运行
复制
ImageIO: PluginForUTType:316: file format 'com.adobe.raw-image' doesn't support writing
Error writing to photo library: The operation couldn’t be completed. (Cocoa error -1.)

我想也许iOS只支持使用iPhone的DNG?

EN

Stack Overflow用户

回答已采纳

发布于 2017-02-02 19:52:34

PHAssetChangeRequest.creationRequestForAsset(from: image)UIImage开始,所以它不会将原始文件输入到库中。UIImage是读取和解码图像文件的可显示结果;当您有一个UIImage时,它不知道它是来自JPEG、DNG还是GIF,还是在运行时通过CGBitmapContext或其他方式呈现的。当您尝试通过creationRequestForAssetFromImage:保存时,您将获取最终结果并将其转换为一个文件--方法想要的任何类型的文件。(可能是JPEG)

如果要将实际的DNG文件放入照片库,则需要使用Photos框架方法,该方法接收原始文件,而不是解码图像。此外,由于不是每个Photos客户端都能处理原始的DNG,所以Photos要求您放入库中的每个DNG文件都附带一个JPEG表示,这是非原始支持应用程序(遗憾的是,包括Photos应用程序本身)可以看到的。

幸运的是,这方面有一个API。

代码语言:javascript
运行
复制
PHPhotoLibrary.shared().performChanges( {
    let creationRequest = PHAssetCreationRequest.forAsset()
    let creationOptions = PHAssetResourceCreationOptions()
    creationOptions.shouldMoveFile = true
    creationRequest.addResource(with: .photo, data: jpegData, options: nil)
    creationRequest.addResource(with: .alternatePhoto, fileURL: dngFileURL, options: creationOptions)
}, completionHandler: completionHandler)

PHAssetCreationRequest用于从底层资源创建资产--一个或多个图像文件、视频文件、其中的某些组合(用于Live )等。photoalternatePhoto资源是如何提供DNG文件及其附带的JPEG预览的。如果您不想将文件从应用程序沙箱复制到Photos库存储,那么shouldMoveFile选项是很好的--这对DNG和4K视频这样的大型资源是很好的。

(代码片段来自苹果的照片捕捉指南。)

这就是说,虽然苹果的原始处理支持来自各种第三方摄像机的图像,但看起来他们的列表不包括任何理光模型。(甚至连这类都没有。)

但这并不妨碍你将理光DNG存储在Photos库中--这只是意味着,只有那些能够从库中有效读取它们的应用程序才需要自己的理光原始处理支持,才能看到除了预览JPEG之外的任何东西。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42008760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档