как узнать, что это изображение jpg или png iphone

Я хотел бы выбрать изображения из UIImagepicker, в фотопленке есть форматы PNG и JPG.

и мне нужно преобразовать его в NSData. Однако мне нужно знать, являются ли эти изображения UIImageJPEGRepresentation или UIImagePNGRepresentation, чтобы я мог их преобразовать.

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

person Desmond    schedule 20.04.2012    source источник


Ответы (3)


Вы не должны знать или заботиться о том, каково внутреннее представление изображений в фотопленке. Упомянутые вами методы UIImageJPEGRepresentation и UIImagePNGRepresentation возвращают вам представления изображения камеры. Вам решать, какое представление вы хотите использовать.

Обобщить:

NSData * pngData = UIImagePNGRepresentation(originalImage);

Вернет вам представление изображения в объекте NSData в формате PNG.

person Perception    schedule 20.04.2012
comment
Иногда вам нужно быть осторожным, потому что, если вы сделаете UIImageJPEGRepresentation из jpeg-изображения, вы можете излишне сжать уже сжатое изображение (потерять качество и время обработки). Например, вам может понадобиться, чтобы выбранное изображение было обработано библиотекой, которая принимает только jpeg. - person Vilém Kurz; 09.09.2015

Когда вызывается метод делегата imagePickerController:didFinishPickingMediaWithInfo: для UIImagePickerController, вы получаете URL-адрес актива для конкретной выбранной фотографии.

[info valueForKey:UIImagePickerControllerReferenceURL]

Теперь этот URL-адрес можно использовать для доступа к ресурсу в ALAssetsLibrary. Затем вам понадобится ALAssetRepresentation этого доступного актива. Из этого ALAssetRepresentation мы можем получить UTI для этого изображения (http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html)

Возможно, код сделал бы это немного яснее:

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

Как объясняет UTI, это должно быть верным ответом на то, как изображение хранится в библиотеке фотографий.

person Ayush Goel    schedule 11.06.2013

в Свифт 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 {

        }
person user1019042    schedule 01.06.2016