5

ich möchte ein Bild von UIImagepicker auswählen, dort sind PNG und JPG Format in der Kamerarolle.wie man dieses Bild kennt, ist jpg oder png iphone

und ich muss es in NSData konvertieren. Jedoch muss ich wissen, ob diese Bilder UIImageJPEGRepresentation oder UIImagePNGRepresentation sind, also könnte ich es umwandeln.

Antwort

9

Sie sollten nicht wissen oder interessieren, was die interne Darstellung von Bildern in der Kamerarolle ist. Die von Ihnen erwähnten Methoden UIImageJPEGRepresentation und UIImagePNGRepresentation geben Ihnen Darstellungen des Kamerarollenbildes zurück. Es liegt an Ihnen auszuwählen, welche Darstellung Sie verwenden möchten.

Fassen wir zusammen:

NSData * pngData = UIImagePNGRepresentation(originalImage); 

kehren Sie die Bilddarstellung in einem NSData Objekt, mit dem Format PNG.

+6

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. –

4

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.

1

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

     } 
Verwandte Themen