如何使用ALAsset获得图像的裁剪版本?

Mic*_*nes 13 iphone ios

我正在尝试使用ALAsset获取图像的裁剪版本.具体来说,我正在从用户的照片库中选择项目,然后上传它们.问题是在库缩略图视图中,iOS向我们显示了裁剪版本.当您选择该缩略图并使用ALAsset拉取该图像的资源时,我会获得完整的分辨率版本.我做了一些研究,找不到任何有助于获得裁剪发生位置的第二个坐标系的东西.

要测试它,您需要iOS5来编辑库中的图像.在图像库中选择图像,选择"编辑",然后裁剪图像.当您获得ALAsset时,您将获得完整的图像,如果您使用iPhoto进行同步,iPhoto也会获取完整的图像.此外,您可以重新编辑图像并撤消裁剪.

这就是我得到图像的方式:

UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
Run Code Online (Sandbox Code Playgroud)

这显然给了我全分辨率图像.有一个fullScreenImage标志,可以将全分辨率图像缩放到屏幕大小.那不是我想要的.

ALAssetRepresenation类有一个scale字段,但这是一个浮点值,这也是我不想要的.

如果有人能告诉我这个裁剪坐标系的位置,我会很感激.

Wil*_*iss 28

你的选择:

选项1(ALAssetLibrary)

使用- (CGImageRef)fullScreenImage方法AlAssetRepresentation.

优点:

  • 所有的辛苦工作都为您完成,您获得的图像看起来就像照片应用程序中的图像.这包括裁剪和其他更改.简单.

缺点:

  • 分辨率为"屏幕尺寸",仅与您使用的设备一样大,而不是裁剪图像的完全可能分辨率.如果这与您无关,那么这是一个完美的选择.

选项2(ALAssetLibrary)

使用AdjustmentXMP图像元数据中的键(@tom指的是什么)提取裁剪数据.施用作物.

效益:

  • 可以以最佳分辨率获得裁剪后的图像

缺点

  • 您只能进行裁剪编辑,而不是任何其他调整(如红眼)
  • 谁知道Apple将来会在"编辑"模式下支持什么,您将来可能需要应用更多编辑.
  • 这很复杂,首先必须解析XML数据以读取裁剪矩形,裁剪未旋转的图像,然后应用旋转.

选项3(一厢情愿)

请求Apple提供一种方法fullResolutionEditedImage,让您获得最佳质量的照片,并应用所有修改.

优点:

  • 一切都神奇地解决了.

缺点:

  • Apple可能永远不会添加此方法.

选项4(UIImagePickerController)

此选项仅适用于使用图像选择器的情况,不能直接将其与资产库一起使用

在NSDictionary中返回 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

您可以从UIImagePickerControllerOriginalImage键中提取完整大小的调整后图像.将此图像保存在某处.然后,不是从资产库中检索图像,而是加载您制作的副本.

优点:

  • 您可以通过调整获得完整尺寸的图像
  • 这是Apple为我们提供的唯一选择,可以通过所有调整(如红眼等)获得全尺寸图像,而不仅仅是裁剪.这在iOS 7中尤其重要,因为引入了可以彻底改变图像的过滤器.

缺点:

  • 只能与图像选择器一起使用(不是ALAssetRepresentation)
  • 您必须保留图像的完整大小的副本.根据此类图像的数量,应用程序的磁盘使用量可能会大幅增加.

iOS 7更新:您可能希望考虑选项4选项1,因为iOS 7现在支持许多操作,如过滤器,您的用户可能会注意到它们是否丢失.这两个选项支持过滤器(和其他编辑),选项4为您提供更高分辨率的结果.


tom*_*tom 19

使用iOS照片应用程序裁剪照片时,可以在ALAssetRepresentation的元数据字典中找到裁剪坐标.fullResolutionImage将为您提供未剪切的照片,您必须自己进行裁剪.

AdjustmentXMP元数据不仅包含裁剪坐标,还指示是否已应用自动增强或删除红眼.

由于iOS的6.0 CIFilter提供filterArrayFromSerializedXMP:inputImageExtent:错误:也许你可以在这里使用ALAssetRepresentation的AdjustmentXMP元数据和应用CIFilter到ALAssetRepresentation的fullResolutionImage重新修改后的图像.

请注意,iOS照片应用程序以不同方式处理JPG和RAW图像.对于JPG图像,带有XMP元数据的新ALAsset存储在相机胶卷中.对于RAW图像,ALAssetRepresentation被添加到原始ALAsset.我不确定这个额外的ALAssetRepresentation是否是修改后的图像,是否具有AdjustmentXMP元数据.除了JPG和RAW图像,您还应该测试RAW + JPG图像的行为.