使用writeJPEGRepresent函数保存带有深度数据的CIImage



我有一个带有深度数据的肖像图像,经过一些处理,我想将其副本保存到保留深度数据的用户相册中(在这种情况下UIImage不是一个选项(。对于此任务,我正在使用函数writeJPEGRepresentation(),它似乎成功地将带有深度信息的修改后的图像保存到某个地方;但是,它不会显示在相册中。

为了出现在相册上,我尝试performChanges()PHPhotoLibrary的功能, 这次它出现在专辑中,但不是修改后的,而是原始的!? 任何帮助都非常感谢。谢谢。

这是代码:

func saveWithDepth(image : CIImage) {
do {
let colorSpace = CGColorSpace(name: CGColorSpace.sRGB)
let depthdata = DepthData
let url = Url
try Context.writeJPEGRepresentation(of: image, to: url!, colorSpace: colorSpace!,
options: [CIImageRepresentationOption.avDepthData :depthdata!])
PHPhotoLibrary.shared().performChanges({
let options = PHAssetResourceCreationOptions()
let creationRequest = PHAssetCreationRequest.forAsset()
creationRequest.addResource(with: .alternatePhoto, fileURL: url!, options: options)
}, completionHandler: { success, error in
if !success {
print("AVCam couldn't save the movie to your photo library: (String(describing: error))")
}
})
} catch {
print("failed")
}
}

我认为问题是JPEG无法存储深度数据(据我所知(。HEIF 将是您应该为此使用的格式。也许你可以尝试这样的事情:

func saveWithDepth(image: CIImage) {
let colorSpace = CGColorSpace(name: CGColorSpace.sRGB)
let depthdata: DepthData
let imageData = context.heifRepresentation(of: image, format: .BGRA8, colorSpace: colorSpace!,
options: [CIImageRepresentationOption.avDepthData: depthdata!])
PHPhotoLibrary.shared().performChanges({
let options = PHAssetResourceCreationOptions()
let creationRequest = PHAssetCreationRequest.forAsset()
creationRequest.addResource(with: .photo, data: imageData, options: options)
}, completionHandler: { success, error in
if !success {
print("Couldn't save the photo to your photo library: (String(describing: error))")
}
})
}

几点意见:

  • 我认为depthdata实际上是一个有意义的值?
  • 您可以创建图像数据,稍后将图像数据直接传递给creationRequest。然后,您无需将文件保存到某个中间位置(之后需要将其删除(。

最新更新