在url上保存图像时出现PHPhotoLibrary错误

时间:2015-02-05 15:57:45

标签: ios image url photokit

我在PHContentEditingOutput提供的网址上创建了一个图片。当我将数据加载到UIImage并像这样保存时 - 它可以正常工作。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    NSData *data = [NSData dataWithContentsOfURL:contentEditingOutput.renderedContentURL]
    UIImage *image = [UIImage imageWithData:data];
    [PHAssetChangeRequest creationRequestForAssetFromImage:image];
} completionHandler:^(BOOL success, NSError *error) {
     ...
}];

但是当我尝试使用url时,它失败了:

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:contentEditingOutput.renderedContentURL];
} completionHandler:^(BOOL success, NSError *error) {
     ...
}];

错误:

  

错误域= NSCocoaErrorDomain代码= -1"无法完成操作。 (可可错误-1。)"

更新

尝试保存修改时出现同样的错误。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:asset];
    request.contentEditingOutput = contentEditingOutput;
} completionHandler:^(BOOL success, NSError *error) {
     ...
}];

该方法适用于视频(creationRequestForAssetFromVideoAtFileURL:),但不适用于图像。出了什么问题?

2 个答案:

答案 0 :(得分:5)

问题在于文件格式。我正在尝试修改 PNG 屏幕截图,但renderingContentURL始终是 tmp / filename。 JPG 。起初我认为这是一个错误,但根据the documentation这是正确的行为。

renderedContentURL

  

阅读此属性以查找用于编写已编辑资产内容的URL。然后,如果编辑照片资产,请将更改后的照片图像写入此URL的JPEG格式文件。如果要编辑视频资源,请将视频导出到此URL的QuickTime(.mov)文件。

解决方案是使用函数

转换图像
NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);

答案 1 :(得分:0)

在传递元数据时,只要 Orientation (在图像元数据内部)不是CGImagePropertyOrientationUp之外,我都会遇到问题。

renderedContentURL文档中也对此进行了说明:

  

编辑后的资产内容必须包含(或“纳入”)预期的   资产的方向。也就是说,方向元数据(如果有)   您在输出图像或视频文件中写入的内容必须声明“ up”   方向,并且图像或视频数据必须显示为正面朝上   在没有方向元数据的情况下显示。

对于图像,需要更新以下元数据键(同时旋转图像数据):
kCGImagePropertyTIFFDictionary \ kCGImagePropertyTIFFOrientation
kCGImagePropertyOrientation
•可能是kCGImagePropertyIPTCImageOrientation