ios - UIImageWriteToSavedPhotosAlbum()不保存裁剪的图像

标签 ios objective-c

我正在尝试将裁剪的图像保存到相机胶卷中。
(我需要以编程方式进行操作,我无法让用户对其进行编辑)

这是我(仍然很基本)的剪切并保存代码:

- (void)cutAndSaveImage:(UIImage*)rawImage
{
    CIImage *workingImage = [[CIImage alloc] initWithImage:rawImage];

    CGRect croppingRect = CGRectMake(0.0f, 0.0f, 3264.0f, 1224.0f);
    CIImage *croppedImage = [workingImage imageByCroppingToRect:croppingRect];

    UIImage *endImage = [UIImage imageWithCIImage:croppedImage scale: 1.0f orientation:UIImageOrientationRight];

    self.testImage.image = endImage;

    UIImageWriteToSavedPhotosAlbum(rawImage, self, @selector(image:didFinishSavingWithError:contextInfo:) , nil);
    UIImageWriteToSavedPhotosAlbum(endImage, self, @selector(image:didFinishSavingWithError:contextInfo:) , nil);
}

该方法在以下位置调用:- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
  • 我首先使用原始CIImage创建一个UIImage
  • 然后,我使用第一个实例方法获得了裁剪后的CIImage
  • 之后,我使用裁剪后的CIImage创建一个新的UIImage

  • 此时,为了获得一些反馈,我将新裁剪的UIImage设置为UIImageView的背景图像。这行得通,我可以清楚地看到图像完全按照我的要求裁剪了。

    但是,当我尝试将其保存到相机胶卷时,事情就停止了。
    我无法保存新创建的endImage
    如您所见,我还添加了一行来保存原始UIImage,仅供比较。原来的保存正常。

    另一个令人困惑的事情是,传递给NSError回调的image:didFinishSavingWithError:contextInfo:对象为nil。 (通常对两次保存尝试都执行该回调)

    编辑:
    刚刚做了一个实验:
    NSLog(@"rawImage: %@    -   rawImage.CGImage: %@", rawImage, rawImage.CGImage);
    NSLog(@"endImage: %@    -   endImage.CGImage: %@", endImage, endImage.CGImage);
    

    看起来只有rawImage(来自UIImagePickerController)才拥有后备CGImageRef。另一个不是通过CIImage创建的。

    可以使用支持的UIImageWriteToSavedPhotosAlbum来使CGImageRef起作用吗?

    最佳答案

    UIImageWriteToSavedPhotosAlbum是否可以使用CGImageRef作为后盾?

    正确。 CIImage也不是图像,仅由CIImage支持的UIImage也不是图像。它只是一种包装。为什么在这里全部使用CIImage?您没有使用CIFilter,所以这没有任何意义。或者,如果您使用的是CIFilter,则必须通过CIContext进行渲染才能将输出作为位图获取。

    您可以通过绘制到较小的图形上下文来轻松进行裁剪。

    关于ios - UIImageWriteToSavedPhotosAlbum()不保存裁剪的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16400805/

    相关文章:

    CALayer 上的 IoS 7 核心文本模糊

    ios - 交换方法时找不到选择器

    objective-c - 如何使用 AFNetworking 立即强制取消 NSOperation?

    iphone - 使用 AudioToolbox 进行短音效音量控制在 iPad/iPod touch 型号上不起作用

    ios - 设置为 nil 或 ""时的 UILabel 文本属性会使 UILabel 从 View 中消失 (Swift/Autolayout/iOS9.1)

    ios - 可编码的 MKPolygon?

    iphone - 使用本地时区将 unix 时间戳转换为 NSdate

    iphone - 改进 UISearchDisplayController 中的搜索

    objective-c - 在编辑模式下将 UISearchBar 与 UITableView 一起使用时,搜索结果不处于编辑模式

    ios - 在 UI 元素上以编程方式调用 iOS 辅助功能语音