首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用ALAsset获得图像的裁剪版本?

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

Stack Overflow用户
提问于 2012-07-19 20:54:11
回答 2查看 3.8K关注 0票数 13

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

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

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

代码语言:javascript
运行
AI代码解释
复制
UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];

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

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

如果有人能告诉我在哪里可以找到这个裁剪的坐标系,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 18:38:13

当使用iOS照片应用程序裁剪照片时,可以在ALAssetRepresentation元数据字典中找到裁剪坐标。fullResolutionImage会给你未裁剪的照片,你必须自己进行裁剪。

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

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

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

票数 19
EN

Stack Overflow用户

发布于 2012-10-15 11:09:14

您的选择:

选项1 (ALAssetLibrary)

使用AlAssetRepresentation- (CGImageRef)fullScreenImage方法。

优点:

  • 所有的艰苦工作都已经为你完成了,你得到的图像看起来就像照片应用程序中的那张。这包括裁剪和其他更改。很简单。

缺点:

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

选项2 (ALAssetLibrary)

在图像的元数据中使用AdjustmentXMP键提取裁剪数据( @tom指的是)。应用裁剪。

优势:

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

缺点

future.

  • It's
  • 你只能获得裁剪编辑,而不能进行任何其他调整(如红眼)
  • 谁知道苹果将来会在“编辑”模式下支持什么,你可能不得不在future.
  • It‘s cropping 中应用更多的编辑,你必须首先解析XML数据以读取裁剪矩形,裁剪未旋转的图像,然后应用旋转。

选项3(如意算盘)

恳求苹果包括一个像fullResolutionEditedImage这样的方法,它可以给你提供最好的质量照片,并应用所有的编辑。

优点:

  • 神奇地解决了所有问题。

缺点:

  • 苹果可能永远不会添加这种方法。

选项4 (UIImagePickerController)

此选项仅在使用图像拾取器时适用,不能直接与资源库一起使用

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

您可以从UIImagePickerControllerOriginalImage密钥中提取调整后的全尺寸图像。将此图像保存到某个位置。然后,加载您制作的副本,而不是从资源库中检索图像。

优点:

使用adjustments

  • This,你可以获得全尺寸的图像,
  • 是苹果提供给我们的唯一选择,可以获得全尺寸的图像,并进行所有调整(如红眼等),而不仅仅是裁剪。这一点在iOS 7中尤其重要,因为它引入了可以彻底改变图像的滤镜。

缺点:

  • 只能与图像拾取器一起使用( ALAssetRepresentation)
  • You必须保留完整大小的图像副本)。根据这类图像的数量,应用程序的磁盘使用量可能会增加substantially.

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

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11569137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文