web-dev-qa-db-fra.com

iOS & Swift - Comment puis-je obtenir et sauvegarder un UIImage de l'utilisateur?

J'écris une application Swift pour iOS. Je souhaite savoir comment obtenir une image à partir de la pellicule de la caméra de l'utilisateur (ou le nom de l'utilisateur) et la sauvegarder localement dans l'application pour pouvoir la référencer ultérieurement. Comment s'y prendrait-on? Par exemple, supposons que je souhaite obtenir l'image et la définir comme image d'un UIImageView dans mon storyboard.

9
quillford

C’est exactement ce que UIImagePickerController combiné à NSUserDefaults fera.

Pour vous, ce sera une tâche en deux parties. Vous devez d’abord capturer l’image avec une variable UIImagePickerController, puis l’enregistrer dans sa photothèque ou la stocker sur son appareil avec NSUserDefaults.

Pour stocker une image avec NSUserDefaults, voir cette question .

5
Brian Tracy

Voici ma combinaison.

Enregistrement de l'image: 

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)

Obtenir une image:

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

Nous pouvons essayer avec Photos Framework de récupérer la dernière image enregistrée.

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
    })
}
4
A.G

Ray Wenderlich a un excellent tutoriel pour utiliser un UIImagePickerController pour sélectionner une image, puis utiliser le AssetsLibrary pour enregistrer dans un album.

Il existe également des informations sur l’utilisation des filtres d’image qui sont plus nombreuses que celles que vous avez demandées dans le didacticiel.

2
Steve Rosenberg

Une fois que vous avez obtenu l’objet UIImage, vous pouvez enregistrer l’image dans un répertoire doc avec le code suivant.

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)
2
dpizzuto

Vous devez absolument utiliser une variable UIImagePickerController comme Brian l'a mentionné, une fois que vous avez l'image sélectionnée, utilisez cette approche de gestionnaire de fichiers. Je ne recommande pas d’utiliser NSUserDefaults pour stocker des images, car cela va à l’encontre de Directives 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")
}
0
Ever Uribe