我正在尝试使用新的Photo框架进行 writeImageToSavedPhotosAlbum 的等效操作。
要保存图像,我只能这样做:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage] as UIImage
PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
let changeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
}, completionHandler: { (success, error) -> Void in
//
})
}
当然,没有魔术,因为我什么都不做
info[UIImagePickerControllerMediaMetadata]
,上面的代码不会将任何元数据保存到“相机胶卷”,正如您将iPhone连接到Mac时使用Preview.app的屏幕截图所看到的那样。
您可以通过打开Preview.app并从“您的设备名称”中选择"file">“导入”来获得该 View ;那么您可以浏览您的图片,并查看使用“相机”应用拍摄的图片显示exif 数据(例如焦距),而使用上述代码保存的则显示空值。
现在,creationRequestForAssetFromImage的文档说:
链接到“+ changeRequestForAsset:”和4个属性(creationDate,位置,收藏夹,隐藏)的功能有点小。可能还要保存的其他其他属性(例如光圈,焦距,快门速度等)呢?
您应该如何使用Photo框架在图像中保存元数据?
最佳答案
这就是我最终要做的事情:
extension UIImage {
/**
Gets the metadata from the photo album
:param: info The picker dictionary
:param: completionHandler A block to call when the metadata is available
*/
class func requestMetadata(info: [NSObject : AnyObject], completionHandler: ([NSObject : AnyObject]) -> Void) {
let assetUrl = info[UIImagePickerControllerReferenceURL] as! NSURL
let result = PHAsset.fetchAssetsWithALAssetURLs([assetUrl], options: nil)
if let asset = result.firstObject as? PHAsset {
let editOptions = PHContentEditingInputRequestOptions()
editOptions.networkAccessAllowed = true
asset.requestContentEditingInputWithOptions(editOptions, completionHandler: { (contentEditingInput, _) -> Void in
let url = contentEditingInput.fullSizeImageURL
let orientation = contentEditingInput.fullSizeImageOrientation
var inputImage = CoreImage.CIImage(contentsOfURL: url)
completionHandler(inputImage.properties())
})
} else {
completionHandler([:])
}
}
}
关于ios - 照片框架: save exif data from picker (aperture,焦距,快门速度,…),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28664181/