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
}
}
}
мы можем попробовать с фото 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")
}