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 列

iOS开发之保存照片到系统相册(Photo Album)

是否有用于图像裁剪和旋转的视图控制器,如 iOS 8 photo.app?

Django / PIL - 上传图像时保存缩略图版本

保存RSS源中的所有图像

Django ImageField 文件保存时处理图像(剪切,再次上传,旋转等)