Cla*_*lis 6 uiimagepickercontroller ios swift
以前的解决方案已弃用- 请不要投票或将其标记为重复
UIImagePickerControllerReferenceURL在iOS 11中已弃用(即使它仍在info字典中返回),应该替换为UIImagePickerControllerPHAsset,但我还没有info找回包含该键的字典。由于不推荐使用,而又不推荐使用,是否有已知的解决方案可以从拾取的图像中提取“拍摄日期”?
作为参考,下面是info当从库中选取和图像时返回的示例字典:
? 4 elements
? 0 : 2 elements
- key : "UIImagePickerControllerImageURL"
- value : file:///private/var/mobile/Containers/Data/Application/EE1BA60E-2DC3-47C5-A58D-86498E95C323/tmp/3A025D4C-B378-474B-8A09-017479A3A776.jpeg
? 1 : 2 elements
- key : "UIImagePickerControllerMediaType"
- value : public.image
? 2 : 2 elements
- key : "UIImagePickerControllerReferenceURL"
- value : assets-library://asset/asset.HEIC?id=537976CD-A550-41C9-9416-92C8072112D7&ext=HEIC
? 3 : 2 elements
- key : "UIImagePickerControllerOriginalImage"
- value : <UIImage: 0x1d04b4760> size {3024, 4032} orientation 3 scale 1.000000
Run Code Online (Sandbox Code Playgroud)
(请注意UIImagePickerControllerReferenceURL,尽管已弃用,但仍然存在,并且建议的替换UIImagePickerControllerPHAsset丢失了。)
如果存在,则获取日期将很简单:
if let asset = info[UIImagePickerControllerPHAsset] as? PHAsset,
let resource = PHAssetResource.assetResources(for: asset).first {
let dateTaken = resource.creationDate
}
Run Code Online (Sandbox Code Playgroud)
苹果会忘记实施UIImagePickerControllerPHAsset吗?有任何解决方法的想法(不使用不推荐使用的方法)吗?
您可以通过 ImageIO 框架检查所选照片的元数据来获取日期。
然而,有关 PHAsset 信息未到达的说法完全是虚假的。它到达得很好。你没有显示你的代码,所以谁知道你在做什么?也许问题是您忘记获得用户授权?没有用户授权,当然无法访问PHAsset。您将获得 UIImagePickerControllerOriginalImage 和 UIImagePickerControllerImageURL ,仅此而已。
这段代码对我来说效果很好(假设我们在首先使用图像选择器控制器之前拥有必要的用户授权):
func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [String : Any]) { //
let asset = info[UIImagePickerControllerPHAsset] as? PHAsset
let url = info[UIImagePickerControllerMediaURL] as? URL
var im = info[UIImagePickerControllerOriginalImage] as? UIImage
if let ed = info[UIImagePickerControllerEditedImage] as? UIImage {
im = ed
}
let live = info[UIImagePickerControllerLivePhoto] as? PHLivePhoto
let imurl = info[UIImagePickerControllerImageURL] as? URL
self.dismiss(animated:true) {
if let style = asset?.playbackStyle { // and so on, works fine
// ....
}
}
}
Run Code Online (Sandbox Code Playgroud)