puedo - transferir fotos de iphone a pc
iPhone-UIImagePickerController-> guardar la imagen en la carpeta de aplicaciones (4)
Tengo una aplicación para iPhone que utiliza un UIImagePickerController
. Como sourceType
tengo
- UIImagePickerControllerSourceTypePhotoLibrary
- UIImagePickerControllerSourceTypeCamera
- UIImagePickerControllerSourceTypeSavedPhotosAlbum
para que el usuario pueda hacer una foto o seleccionar una de la biblioteca de fotos de las fotos o las fotos de la cámara.
La imagen se mostrará en un UIImageView. La imagen debe guardarse si el usuario cierra la aplicación. Así que para los campos de texto, uso NSUserDefaults
. Lo sé, no es una buena manera de guardar la imagen dentro de NSUSerDefaults con NSData, así que quiero guardar / copiar la imagen en una carpeta controlada por mi aplicación similar a NSUserDefaults.
¿Cómo puedo hacer esto? Quiero guardarlo, y luego puedo escribir la ruta del archivo en mi NSUserDefaults
y leerlo al iniciar la aplicación.
Gracias de antemano y Saludos cordiales.
Actualiza la respuesta de Knuku para Swift 3.0
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
//obtaining saving path
let fileManager = FileManager.default
let documentsPath = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first
let imagePath = documentsPath?.appendingPathComponent("image.jpg")
// extract image from the picker and save it
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
try! UIImageJPEGRepresentation(pickedImage, 0.0)?.write(to: imagePath!)
}
self.dismiss(animated: true, completion: nil)
}
aquí la imagen se guarda como jpeg pero también puede guardarla como png. el parámetro 0.0 significa compresión y es la calidad más baja, si desea obtener el mejor uso 1.0.
Dependiendo del formato de archivo que desee guardar, puede utilizar
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
O
[UIImageJPEGRepresentation(image) writeToFile:path atomically:YES];
Este es el código para guardar el UIImage en el directorio del documento. Puede usar este código en el método delegado didFinishPickingImage:
// Create paths to output images
NSString *pngPath = [NSHomeDirectory();
stringByAppendingPathComponent:@"Documents/Test.png"];
NSString *jpgPath = [NSHomeDirectory();
stringByAppendingPathComponent:@"Documents/Test.jpg"];
// Write a UIImage to JPEG with minimum compression (best quality)
// The value ''image'' must be a UIImage object
// The value ''1.0'' represents image compression quality as value from 0.0 to 1.0
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];
// Write image to PNG
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES];
// Let''s check to see if files were successfully written...
// Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory();
stringByAppendingPathComponent:@"Documents"];
// Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
EDITAR
También puedes usar:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
para encontrar la ruta al directorio de documentos de su aplicación, en lugar de NSHomeDierctory.
Puede usar el siguiente código en la implementación del delegado UIImagePickerControllerDelegate
- (void) imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
//obtaining saving path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"latest_photo.png"];
//extracting image from the picker and saving it
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.image"]){
UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
NSData *webData = UIImagePNGRepresentation(editedImage);
[webData writeToFile:imagePath atomically:YES];
}
}
Eso es todo