我试图提供一个用户从照片库中选择的图像。因此,我使用UIImagePickerController
进行选择。但这里有一个问题,在文件系统中获得其初始URL(我需要这个CKAsset
)。
我的准则。
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let imageURL = info[UIImagePickerControllerReferenceURL] as NSURL
let path = imageURL.path!
let imageName = path.lastPathComponent
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentDirectory = paths.first as String!
let localPath = documentDirectory + "/" + imageName
let imageData = NSData(contentsOfFile: localPath)!
let image = UIImage(data: imageData)!
picker.dismissViewControllerAnimated(true, completion: nil)
}
imageURL比较晦涩,描述的是资产URL,而不是文件系统中的URL,看起来像:assets-library://asset/asset.JPG?id=B6C0A21C-07C3-493D-8B44-3BA4C9981C25&ext=JPG
。
根据这个逻辑,path是/asset.JPG
,其中asset.JPG
是图像的名称。
然后,我访问我的文档文件夹,并试图找到一个文件与路径:
/Users/Eugene/Library/Developer/CoreSimulator/Devices/3C5E9A23-8220-4B37-BD14-F1E42EEC2C7C/data/Containers/Data/Application/20EBAAE2-6C6F-4651-A48F-16A222CCB3A2/Documents/asset.JPG
也很神秘,但似乎是一个不存在的图像的真实的路径...没有图像与该路径可以找到。这让我恶心。
我必须从一开始就保存图像吗?或者有其他方法可以去吗?
我看了很多AssetsLibraryAPI的教程,但没有找到任何有用的东西来解决我的问题,提前感谢!
8条答案
按热度按时间bvjxkvbb1#
好吧,我已经解决了这个问题。
所有你需要做的就是简单地抓取图像(
info[UIImagePickerControllerOriginalImage] as UIImage
)并保存到给定的目录。如果你只需要保存1张图片,它工作得很好。下面的代码ID。of1yzvn42#
在SWIFT 4中,您可以尝试以下操作:
cmssoen23#
对于Swift 5+ ;根据@Jaydip的回答
wxclj1h54#
vsmadaxz5#
检查这个解决方案。
oyxsuwqo6#
在swift4中
rqcrx0a67#
swift 4.2
谢谢
arknldoa8#