5

Mi piacerebbe scegliere un'immagine da UIImagepicker, ci sono formati PNG e JPG nel rullino fotografico.come sapere questa immagine è jpg o png iphone

e ho bisogno di convertirlo in NSData. Tuttavia ho bisogno di sapere se queste immagini sono UIImageJPEGRepresentation o UIImagePNGRepresentation così ho potuto convertirlo.

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

risposta

9

Si consiglia di non sapere o cura ciò che la rappresentazione interna delle immagini nel rullino fotografico è. I metodi che hai citato UIImageJPEGRepresentation e UIImagePNGRepresentation ti restituiscono rappresentazioni dell'immagine del rullino. Sta a te scegliere quale rappresentazione vuoi usare.

In sintesi:

NSData * pngData = UIImagePNGRepresentation(originalImage); 

restituirà la rappresentazione dell'immagine in un oggetto NSData, con il formato PNG.

+6

A volte si deve preoccuparsi, perché se si fanno UIImageJPEGRepresentation jpeg immagine, si potrebbe comprimere inutilmente un'immagine già compressa (perdere la qualità e tempo di elaborazione). Ad esempio, potresti aver bisogno che l'immagine scelta venga ulteriormente elaborata dalla libreria che accetta solo jpeg. –

4

Quando il metodo delegato imagePickerController: didFinishPickingMediaWithInfo: per UIImagePickerController viene chiamato, si ottiene l'URL della risorsa per la particolare foto selezionata.

[info valueForKey:UIImagePickerControllerReferenceURL] 

Ora questo URL può essere utilizzato per accedere alla risorsa in ALAssetsLibrary. Allora avresti bisogno di una rappresentazione ALAsset di quella risorsa accessibile. Da questo ALAssetRepresentation possiamo ottenere l'UTI per quell'immagine (http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html)

Forse il codice sarebbe rendere un po 'più chiaro:

- (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); 
    }]; 
    } 
} 

Come spiega l'UTI, questo dovrebbe essere un sicuro colpo risposta a come la l'immagine è memorizzata nella libreria di foto.

1

a 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 { 

     } 
Problemi correlati