我正在尝试将裁剪的图像保存到相机胶卷中。
(我需要以编程方式进行操作,我无法让用户对其进行编辑)
这是我(仍然很基本)的剪切并保存代码:
- (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
。 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/