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.
fonte
2013-06-11 17:33:39
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. –