3

我正在尝试将当前在我的图像视图中的图像保存到相机胶卷。我试图保存的图像完美地显示在图像视图中,[mainImage setImage:outputImage];但是,当我尝试按下保存图像的按钮时:

- (IBAction)saveImage:(id)sender {

    UIImageWriteToSavedPhotosAlbum([mainImage image], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

}

-(void)image:(UIImage*)image didFinishSavingWithError:(NSError *)error contextInfo:(void*)contextInfo{
    NSLog(@"%@", [error localizedDescription]);
}

相机胶卷是空的。我正在使用 iOS7 模拟器。任何帮助,将不胜感激!

编辑:断言也没有说什么。

~地毯嘶嘶声

4

2 回答 2

12

这花了我一段时间才弄清楚...

我不完全确定为什么,但是如果UIImage您尝试保存的内容由CIImage(ie image.cgImage == nil)支持,那么UIImageWriteToSavedPhotosAlbum奇怪的nil是,完成处理程序中的错误对象会成功完成,但照片中不会显示任何内容。

如果是这种情况,您可以将UIImage's转换CIImageCGImage( Swift 4.1 ):

// this could also be made into an extension
func cgImage(from ciImage: CIImage) -> CGImage? {
    let context = CIContext(options: nil)
    return context.createCGImage(ciImage, from: ciImage.extent)
}

然后转换回a UIImage(这两个步骤可以合并):

guard let ciImage = image.ciImage else { return }
guard let cgImage = cgImage(from: ciImage) else { return } // the above function

let newImage = UIImage(cgImage: cgImage) // ready to be saved!

我希望这个解决方案可以避免这个问题给我造成的恶化。

于 2018-06-26T19:08:42.823 回答
1

我遇到了类似的问题并搜索了答案。虽然我不确定这是完全相同的原因,但我希望这可以给你一些见解。

我的建议是检查 [mainImage image]。即使它在图像视图中完美显示,它也可能返回 nil。

就我而言,我应该使用info[UIImagePickerControllerOriginalImage]而不是info[UIImagePickerControllerEditedImage],它返回 nil,这就是它从未被保存的原因。

于 2014-04-11T06:14:38.190 回答