5

me gustaría elegir una imágenes de UIImagepicker, hay formato PNG y JPG en el rollo de la cámara.cómo saber esta imagen es jpg o png iphone

y necesito convertirlo a NSData. Sin embargo, necesito saber si estas imágenes son UIImageJPEGRepresentation o UIImagePNGRepresentation para poder convertirlas.

UIImage *orginalImage = [info objectForKey:UIImagePickerControllerOriginalImage];  
    [picker dismissViewControllerAnimated:YES completion:nil]; 
    NSData *orgData = UIImagePNGRepresentation(orginalImage); 

Respuesta

9

No debe saber ni importar cuál es la representación interna de las imágenes en el rollo de la cámara. Los métodos que mencionó UIImageJPEGRepresentation y UIImagePNGRepresentation le devuelven representaciones de la imagen del rodillo de la cámara. Depende de usted elegir qué representación desea usar.

En resumen:

NSData * pngData = UIImagePNGRepresentation(originalImage); 

le devolverá la representación de la imagen en un objeto NSData, con el formato PNG.

+6

A veces hay que cuidar, porque si haces UIImageJPEGRepresentation jpeg imagen de, es posible comprimir innecesariamente la imagen ya comprimida (perder la calidad y el tiempo de procesamiento). Por ejemplo, puede necesitar que la imagen seleccionada sea procesada posteriormente por la biblioteca, que solo acepta jpeg. –

4

Cuando se llama al método delegado imagePickerController: didFinishPickingMediaWithInfo: para UIImagePickerController, se obtiene la URL del activo para la foto seleccionada.

[info valueForKey:UIImagePickerControllerReferenceURL] 

Ahora esta URL se puede usar para acceder al activo en ALAssetsLibrary. Entonces necesitaría una ALAssetRepresentation de ese activo al que se accede. A partir de este ALAssetRepresentation podemos obtener la UTI para esa imagen (http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html)

Tal vez el código habría que sea un poco más claro:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    if (!(picker.sourceType == UIImagePickerControllerSourceTypeCamera)) { 
    NSLog(@"User picked image from photo library"); 
    ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; 
    [library assetForURL:[info valueForKey:UIImagePickerControllerReferenceURL] resultBlock:^(ALAsset *asset) { 
     ALAssetRepresentation *repr = [asset defaultRepresentation]; 
     if ([[repr UTI] isEqualToString:@"public.png"]) { 
     NSLog(@"This image is a PNG image in Photo Library"); 
     } else if ([[repr UTI] isEqualToString:@"public.jpeg"]) { 
     NSLog(@"This image is a JPEG image in Photo Library"); 
     } 
    } failureBlock:^(NSError *error) { 
     NSLog(@"Error getting asset! %@", error); 
    }]; 
    } 
} 

Como explica la UTI, esto debe ser un tiro respuesta segura a la forma en la la imagen se almacena en la biblioteca de fotos.

1

en Swift 2,2

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    if (!(picker.sourceType == UIImagePickerControllerSourceType.Camera)) { 
     let assetPath = info[UIImagePickerControllerReferenceURL] as! NSURL 
     if assetPath.absoluteString.hasSuffix("JPG") { 

     } else { 

     } 
Cuestiones relacionadas