5

Chciałbym wybrać obrazy z UIImagepicker, są JPG i PNG w rolce kamery.jak poznać ten obraz to jpg lub png iphone

i muszę go przekonwertować na NSData. Jednak muszę wiedzieć, czy ten obraz jest UIImageJPEGRepresentation lub UIImagePNGRepresentation, więc mogę go przekonwertować.

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

Odpowiedz

9

Nie powinien wiedzieć lub obchodzi, co wewnętrzna reprezentacja obrazów w rolki aparatu jest. Wymienione metody: UIImageJPEGRepresentation i UIImagePNGRepresentation Powodują przesłanie reprezentacji obrazu rolki aparatu. Od Ciebie zależy, którą reprezentację chcesz użyć.

Podsumowując:

NSData * pngData = UIImagePNGRepresentation(originalImage); 

powróci reprezentację obrazu w obiekcie NSData, w formacie PNG.

+6

Czasem trzeba dbać, bo jeśli się UIImageJPEGRepresentation z JPEG, można skompresować niepotrzebnie już skompresowany obraz (tracą jakość i czas przetwarzania). Na przykład możesz potrzebować wybranego obrazu do dalszego przetwarzania przez bibliotekę, która akceptuje tylko jpeg. –

4

Po wywołaniu metody delegata imagePickerController: didFinishPickingMediaWithInfo: dla wywołania UIImagePickerController otrzymasz adres URL zasobu dla wybranego zdjęcia.

[info valueForKey:UIImagePickerControllerReferenceURL] 

Teraz ten adres URL może zostać wykorzystany do uzyskania dostępu do zasobu w bibliotece ALAssets. Wtedy potrzebowaliby Państwo ALAssetRepresentation tego dostępnego zasobu. Z tego ALAssetRepresentation możemy uzyskać ZUM dla tego obrazu (http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html)

Może kod stałaby się nieco jaśniej:

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

Jak wyjaśnia UTI, to powinien być pewny strzał odpowiedź, w jaki sposób obraz jest przechowywany w bibliotece zdjęć.

1

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

     } 
Powiązane problemy