我正在尝试获取使用ALAsset拉取的图像的裁剪版本。具体地说,我从用户的照片库中选择项目,然后上传它们。问题是,在库缩略图视图中,iOS向我们显示了裁剪后的版本。当你选择该缩略图并使用ALAsset拉取该图像的资源时,我得到了全分辨率版本。我做了一些研究,但找不到任何有助于获得裁剪发生位置的第二个坐标系的东西。
要测试它,您需要iOS5来编辑库中的图像。在您的图片库中选择一张图片,选择“编辑”,然后裁剪图片。当你得到ALAsset时,你将得到完整的图像,如果你使用iPhoto同步,iPhoto也会拉出完整的图像。此外,您还可以重新编辑图像并撤消裁剪。
这就是我获取图像的方式:
UIImage *tmpImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
很明显,这给了我全分辨率的图像。有一个fullScreenImage标志,可以将全分辨率图像缩放到屏幕的大小。这不是我想要的。
ALAssetRepresenation类有一个scale字段,但这是一个浮点值,这也是我不想要的。
如果有人能告诉我在哪里可以找到这个裁剪的坐标系,我将不胜感激。
发布于 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图像的行为。
发布于 2012-10-15 11:09:14
您的选择:
选项1 (ALAssetLibrary)
使用AlAssetRepresentation
的- (CGImageRef)fullScreenImage
方法。
优点:
缺点:
选项2 (ALAssetLibrary)
在图像的元数据中使用AdjustmentXMP
键提取裁剪数据( @tom指的是)。应用裁剪。
优势:
缺点
future.
选项3(如意算盘)
恳求苹果包括一个像fullResolutionEditedImage
这样的方法,它可以给你提供最好的质量照片,并应用所有的编辑。
优点:
缺点:
选项4 (UIImagePickerController)
此选项仅在使用图像拾取器时适用,不能直接与资源库一起使用
在-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
返回的NSDictionary中
您可以从UIImagePickerControllerOriginalImage
密钥中提取调整后的全尺寸图像。将此图像保存到某个位置。然后,加载您制作的副本,而不是从资源库中检索图像。
优点:
使用adjustments
缺点:
ALAssetRepresentation
)iOS 7更新:您可能希望考虑选项4或选项1,因为iOS 7现在支持许多操作,如过滤器,如果它们丢失了,您的用户可能会注意到。这两个选项支持滤镜(和其他编辑),选项4为您提供更高的分辨率结果。
https://stackoverflow.com/questions/11569137
复制相似问题