ios swift uiimage xcode6 camera-roll

iOS y Swift: ¿cómo puedo obtener y guardar un UIImage del usuario?



xcode6 camera-roll (5)

Estoy escribiendo una aplicación Swift para iOS. Quiero saber cómo obtener una imagen del rollo de la cámara del usuario (o lo que sea que estén llamando en estos días) y guardarlo localmente dentro de la aplicación para que pueda consultarlo más tarde. ¿Cómo podría uno hacer esto? Como ejemplo, digamos que quiero obtener la imagen y establecerla como la imagen para un UIImageView en mi guión gráfico.


Una vez que obtenga el objeto UIImage, puede guardar la imagen en un directorio 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 imagen y luego usar AssetsLibrary para guardar en un álbum.

También hay información sobre el uso de filtros de imágenes que es más de lo que pediste en el tutorial.


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


Aquí está mi combinación.

Guardando Imagen:

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 imagen:

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 probar con Photos Framework para buscar la última imagen 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 }) }


Esto es exactamente lo que UIImagePickerController combinado con NSUserDefaults .

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

Para almacenar una imagen con NSUserDefaults , vea esta pregunta .