Wenn die Delegate-Methode imagePickerController: didFinishPickingMediaWithInfo: Wenn UIImagePickerController aufgerufen wird, erhalten Sie die Asset-URL für das ausgewählte Foto.
Jetzt kann diese URL verwendet werden, um auf das Asset in der ALAssentsLibrary zuzugreifen. Dann benötigen Sie eine ALAssetRepresentation des aufgerufenen Assets. Von diesem ALAssetRepresentation wir die UTI für das Bild bekommen (http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html)
Vielleicht würde der Code es klarer etwas machen:
- (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);
}];
}
}
Wie der UTI erklärt, sollte dies ein sicherer Schuss Antwort darauf, wie das sein Bild wird in der Fotobibliothek gespeichert.
Manchmal müssen Sie sich interessieren, denn wenn man UIImageJPEGRepresentation von JPEG-Bild machen, Sie unnötig bereits komprimiertes Bild komprimieren könnten (verlieren Qualität und Bearbeitungszeit). Zum Beispiel könnte es sein, dass das ausgewählte Bild von einer Bibliothek weiter verarbeitet werden muss, die nur JPEG akzeptiert. –