ios Photo Framework:保存图像时出错
Posted
技术标签:
【中文标题】ios Photo Framework:保存图像时出错【英文标题】:ios Photo Framework: Error in saving image 【发布时间】:2018-01-08 07:44:31 【问题描述】:我正在编辑图像的内容并执行了link 中提到的步骤。但我收到以下错误。 错误 NSError * 域:@"NSCocoaErrorDomain" - 代码:18446744073709551615 0x000060000065cfb0
图像的内容已更改,但我看不到还原更改的选项。图像的缩略图也没有改变,仍然显示旧的内容。请告诉我可能是什么问题。我正在编辑 jpeg 图片。
代码如下。这里 imageData 是图像的修改数据, metaDic 是元数据。 getAssetIdentifier 给出我要修改的资产的标识符
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef) imageData, NULL);
CFStringRef UTI = CGImageSourceGetType(source);
__block NSMutableData *dest_data = [NSMutableData data];
CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)dest_data,UTI,1,NULL);
CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef) metaDict);
BOOL success = CGImageDestinationFinalize(destination);
CFRelease(source);
CFRelease(destination);
if(success)
NSString *assetIdentifier = [self.delegate getAssetIdentifier];
PHFetchResult* assetResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetIdentifier] options:nil];
if(assetResult.count)
__block PHAsset *asset = [assetResult firstObject];
[asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info)
__block PHContentEditingOutput *output = [[PHContentEditingOutput alloc] initWithContentEditingInput:contentEditingInput];
// Provide new adjustments and render output to given location.
output.adjustmentData = [[PHAdjustmentData alloc] initWithFormatIdentifier:[[NSBundle mainBundle] bundleIdentifier] formatVersion:[PSSettings sharedSettings].appVersion data:[NSKeyedArchiver archivedDataWithRootObject:@""]];
__block NSURL *fileUrl = contentEditingInput.fullSizeImageURL;
[dest_data writeToURL:fileUrl atomically:YES];
if([asset canPerformEditOperation:PHAssetEditOperationContent])
[[phphotoLibrary sharedPhotoLibrary] performChanges:^
// Create a change request from the asset to be modified.
PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:asset];
request.contentEditingOutput = output;
completionHandler:^(BOOL success, NSError *error)
if(success && completionBlock)
completionBlock(error, fileUrl);
];
];
【问题讨论】:
error.description 是什么? @Daniel 在我的例子中,对于相同的错误代码18446744073709551615
,error.description 是@"The operation couldn’t be completed. (PHPhotosErrorDomain error -1.)"
【参考方案1】:
我使用 contentEditingInput.fullSizeImageURL 进行 writeToURl 调用,而我应该使用 output.renderedContentURL
【讨论】:
【参考方案2】:此调用失败,当文件不存在时会出现奇怪的错误。检查文件写入调用的返回值和错误。检查 dest_data 是否为 nil,并在调用后检查该文件是否确实存在。
[dest_data writeToURL:fileUrl atomically:YES];
【讨论】:
以上是关于ios Photo Framework:保存图像时出错的主要内容,如果未能解决你的问题,请参考以下文章
将图像 (byte[] BMP) 保存到 Ole Photo 列