ALAsset已被弃用 - 请使用来自照片框架的PHAsset

5

我正在使用以下代码获取一张图片:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) }
      let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
}

我可以检索图像,也可以将图像用作按钮背景或其他任何我想要的东西,但是似乎无法检索照片的元数据。现在,在互联网上的其他地方,有很多关于使用ALAssets和它们的图像数据技术的讨论,但是,最近ALAssets已经过时了。由于我的图像不是用户刚拍摄的图像,而是从相机卷中选择的图像,所以我无法使用:let metadata = info[UIImagePickerControllerMediaMetaData] as! NSDictionary。因此,如果有人能指点我如何在不使用ALAssets的情况下获取用户从相机卷中选择的图像的元数据,那将不胜感激!谢谢!

PhotoKit 仅适用于 iOS 8.0 及以上版本。 - Lumialxk
2个回答

6
如果您想从相机胶卷中获取图像,则可以使用以下方法:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

let imageUrl = info["UIImagePickerControllerReferenceURL"]
let asset = PHAsset.fetchAssetsWithALAssetURLs([imageUrl], options: nil).firstObject as! PHAsset
print("location: " + String(asset.location))
print("Creation Date: " + String(asset.creationDate))

}

1
好的,但是资产从哪里来?我猜这就是我在使用PHImageManager时困惑的地方。 - impression7vx
1
PHImageManager将获取相机拍摄的相册中的所有图像。 - Muhammad Ali
1
我明白了,那么我该如何仅检索出一张图片呢?我让他们的照片库弹出,并要求用户选择他们想要用于我的应用程序的图片。我怎样才能知道他们选择的是哪一张呢? - impression7vx
2
在iOS 10中,info[@"UIImagePickerControllerReferenceURL"]返回null。 - Kirti Nikam
4
PHAsset.fetchAssetsWithALAssetURLs 在iOS 11中已被弃用。 - m8labs
显示剩余4条评论

-1

一个Objective-C的解决方案来自Muhammad Yawar Ali的回答:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    NSString * imageUrl = info[@"UIImagePickerControllerReferenceURL"];
    PHAsset * asset = [[PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:imageUrl] options:nil]firstObject];
    NSLog(@"location: %@",asset.location);
    NSLog(@"Creation Date: %@",asset.creationDate);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接