我正在尝试使用ALAsset获取图像的裁剪版本。具体来说,我正在从用户的照片库中选择项目,然后上传它们。问题是在库缩略图视图中,iOS向我们显示了裁剪版本。当您选择该缩略图并使用ALAsset拉取该图像的资源时,我会获得完整的分辨率版本。 我做了一些研究,找不到任何有助于获得裁剪发生位置的第二个坐标系的东西。
要测试它,您需要iOS5来编辑库中的图像。在图像库中选择图像,选择“编辑”,然后裁剪图像。当您获得ALAsset时,您将获得完整的图像,如果您使用iPhoto进行同步,iPhoto也会获取完整的图像。此外,您可以重新编辑图像并撤消裁剪。
这就是我获取图片的方式:
UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
显然,这给了我全分辨率图像。有一个fullScreenImage标志,可以将全分辨率图像缩放到屏幕大小。那不是我想要的。
ALAssetRepresenation类有一个缩放字段,但这是一个浮点值,这也是我不想要的。
如果有人能告诉我这个裁剪坐标系的位置,我会很感激。
答案 0 :(得分:28)
您的选择:
使用- (CGImageRef)fullScreenImage
的{{1}}方法。
优点:
缺点:
使用图像元数据中的AlAssetRepresentation
键提取裁剪数据(@tom指的是什么)。施用作物。
好处:
缺点
请求Apple添加AdjustmentXMP
等方法,为您提供质量最佳的照片,并应用所有修改。
优点:
缺点:
此选项仅适用于使用图像选择器的情况,不能直接将其用于资产库
在fullResolutionEditedImage
您可以从-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
键中提取完整尺寸的调整后图像。将此图像保存在某处。然后,不是从资产库中检索图像,而是加载您制作的副本。
优点:
缺点:
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图像的行为。