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

时间:2012-07-19 20:54:11

标签: iphone ios

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

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

这就是我获取图片的方式:

UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];

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

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

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

2 个答案:

答案 0 :(得分:28)

您的选择:

选项1(ALAssetLibrary)

使用- (CGImageRef)fullScreenImage的{​​{1}}方法。

优点:

  • 为您完成所有艰苦的工作,您将获得一个看起来就像照片应用程序中的图像。这包括裁剪和其他更改。容易。

缺点:

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

选项2(ALAssetLibrary)

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

好处:

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

缺点

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

选项3(一厢情愿)

请求Apple添加AdjustmentXMP等方法,为您提供质量最佳的照片,并应用所有修改。

优点:

  • 一切都神奇地解决了。

缺点:

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

选项4(UIImagePickerController)

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

fullResolutionEditedImage

返回的NSDictionary中

您可以从-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info键中提取完整尺寸的调整后图像。将此图像保存在某处。然后,不是从资产库中检索图像,而是加载您制作的副本。

优点:

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

缺点:

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

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

答案 1 :(得分:19)

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

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

从iOS 6.0开始,CIFilter提供了filterArrayFromSerializedXMP:inputImageExtent:error:可能你可以在这里使用ALAssetRepresentation的AdjustmentXMP元数据,并将CIFilter应用到ALAssetRepresentation的fullResolutionImage上,以重新创建修改后的图像。

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