iOS y Swift: ¿Cómo puedo get y save un UIImage del usuario?

Estoy escribiendo una aplicación Swift para iOS. Quiero saber cómo get una image del rollo de camera del usuario (o lo que sea que lo estén llamando actualmente) y guárdalo localmente dentro de la aplicación para que pueda hacer reference a él más tarde. ¿Cómo se puede hacer esto? Como ejemplo, digamos que quiero get la image y configurarla como la image para un UIImageView en mi storyboard.

Esto es exactamente lo que UIImagePickerController combinado con NSUserDefaults .

Para ti será una tarea de dos partes. Primero tendrá que capturar la image con un UIImagePickerController y luego almacenarla en su biblioteca de fotos, o almacenarla en su dispositivo con NSUserDefaults .

Para almacenar una image con NSUserDefaults , consulte esta pregunta .

Una vez que obtenga el object UIImage, puede save la image en una dirección de documento con el siguiente código

 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) 

Ray Wenderlich tiene un gran tutorial para usar un UIImagePickerController para seleccionar una image y luego usar AssetsLibrary para save en un álbum.

También hay información sobre el uso de filters de image que es más de lo que pidió en el tutorial.

Aquí está mi combinación.

Guardar 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) 

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

Podemos intentar con Photos Framework para search la última image guardada.

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

Definitivamente debería usar un UIImagePickerController como mencionó Brian, una vez que tenga la image seleccionada, use este enfoque de administrador de files. No recomiendo utilizar NSUserDefaults para almacenar imágenes, ya que va en contra de las pautas de 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") } 
    Intereting Posts