5

我想从 UIImagepicker 中挑选图像,相机胶卷中有 PNG 和 JPG 格式。

我需要将其转换为 NSData。但是我需要知道这些图像是否是UIImageJPEGRepresentation或者UIImagePNGRepresentation我可以转换它。

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

3 回答 3

10

您不应该知道或关心相机胶卷中图像的内部表示是什么。您提到的方法UIImageJPEGRepresentationUIImagePNGRepresentation返回相机胶卷图像的表示。您可以选择要使用的表示形式。

总结一下:

NSData * pngData = UIImagePNGRepresentation(originalImage);

将返回对象中的图像表示,NSData格式为 PNG。

于 2012-04-20T02:21:57.333 回答
4

当调用 UIImagePickerController 的委托方法 imagePickerController:didFinishPickingMediaWithInfo: 时,您将获得所选照片的​​资产 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 解释的那样,这应该是图像如何存储在照片库中的可靠答案。

于 2013-06-11T17:33:39.450 回答
1

在斯威夫特 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 {

        }
于 2016-06-01T14:17:42.177 回答