iOS & Swift - Как я могу получить и сохранить UIImage от пользователя?
Я пишу приложение Swift для iOS. Я хочу знать, как получить изображение с камеры пользователя (или как там его называют в наши дни) и сохранить его локально в приложении, чтобы я мог сослаться на него позже. Как можно поступить об этом? В качестве примера, скажем, я хочу получить изображение и установить его в качестве изображения для UIImageView в моей раскадровке.
5 ответов
Это именно то, что UIImagePickerController
в сочетании с NSUserDefaults
Сделаю.
Для вас это будет задача из двух частей. Сначала вам нужно будет сделать снимок с UIImagePickerController
а затем либо сохранить его в своей библиотеке фотографий, либо сохранить его на своем устройстве с NSUserDefaults
,
Чтобы сохранить изображение с NSUserDefaults
смотри этот вопрос.
Вот моя комбинация.
Сохранение изображения:
let imageData = NSData(data:UIImagePNGRepresentation(pickedimage))
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var docs: String = paths[0] as! String
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png")
let result = imageData.writeToFile(fullPath, atomically: true)
print(fullPath)
Получить изображение:
let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
{
if paths.count > 0
{
if let dirPath = paths[0] as? String
{
let readPath = dirPath.stringByAppendingPathComponent("yourNameImg.png")
let image = UIImage(contentsOfFile: readPath)
UploadImagePreview.image = image
}
}
}
Мы можем попробовать с помощью Photos Framework получить последнее сохраненное изображение.
var fetchOptions: PHFetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
var fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)
if (fetchResult.firstObject != nil) {
var lastAsset: PHAsset = fetchResult.lastObject as! PHAsset
PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: self.UploadImagePreview.bounds.size, contentMode: PHImageContentMode.AspectFill, options: PHImageRequestOptions(), resultHandler: { (result, info) -> Void in
self.UploadImagePreview.image = result
})
}
Как только вы получите объект UIImage, вы можете сохранить изображение в doc dir с помощью следующего кода
let imageData = NSData(data:UIImagePNGRepresentation(wineImage.image))
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var docs: String = paths[0] as! String
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png")
let result = imageData.writeToFile(fullPath, atomically: true)
Рэй Вендерлих имеет отличный учебник по использованию UIImagePickerController
выбрать изображение, а затем с помощью AssetsLibrary
сохранить в альбом.
Также есть информация об использовании фильтров изображений, которая больше, чем вы просили в учебнике.
Вы должны определенно использовать UIImagePickerController
как упомянул Брайан, когда у вас есть выбранное изображение, используйте этот подход файлового менеджера. Я не рекомендую использовать NSUserDefaults
хранить изображения в соответствии с рекомендациями Apple:
let imageData = UIImagePNGRepresentation(selectedImage)
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let imagePath = paths.stringByAppendingPathComponent("cached.png")
if !imageData.writeToFile(imagePath, atomically: false)
{
println("not saved")
} else {
println("saved")
NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath")
}