8

在我正在开发的应用程序中,我使用的是用户从他们的相册中选择的图像。我需要将该照片的高分辨率版本上传到我的服务器。

我正在使用 imagePickerController 并且我确定我有 2 个选项

  • 使用 UIImagePickerControllerOriginalImage 中的 UIImage
  • 通过使用 UIImagePickerControllerReferenceURL 和 ALAssetsLibrary assetForURL 获取原始资产(我不喜欢这样,因为它会提示用户使用他们当前的位置,我不需要)

我的问题是......如果我使用第一个选项和第二个选项,图像质量有什么区别吗?

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    //option 1
            UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
            NSData *imgData = UIImagePNGRepresentation(image);

    // option 2 (will prompt user to allow use of current location)
            NSURL *imgURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"];
            __block NSData* imgData;

            ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init];

            [assetLibrary assetForURL:img resultBlock:^(ALAsset *asset)
             {
                 ALAssetRepresentation *rep = [asset defaultRepresentation];
                 Byte *buffer = (Byte*)malloc(rep.size);
                 NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
                 imgData = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES]; 
             }
                       failureBlock:^(NSError *err) {
                             NSLog(@"Error: %@",[err localizedDescription]);
                         }]; 
        }
4

1 回答 1

13

我使用这两个选项进行了比较图像的测试。使用选项 1,图像是两倍大(4.22 MB 对 2.04 MB)。在 Photoshop 中查看照片,质量似乎没有任何重大差异。在查看级别时,选项 1 创建的级别并不那么平滑(下图)。查看文件属性时,选项 1 创建的文件缺少选项 2 创建的文件所具有的一些“原点”、“相机”和“高级照片”选项。我还没有决定要使用哪种方式,但希望这些信息对其他人有所帮助!

Photoshop 中的级别

于 2012-09-19T19:10:24.557 回答