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")
}