UIImageWriteToSavedPhotosAlbum()不保存裁剪的图像
我正在尝试将裁剪的图像保存到相机胶卷。
(我需要以编程方式进行,我不能让用户编辑它)
这是我的(仍然非常基本的)剪切和保存代码:
- (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
- 我首先使用原始
UIImage
创建一个CIImage
。 - 然后我使用第一个实例方法获得裁剪的
CIImage
。 - 之后,我使用裁剪的CIImage创建一个新的
UIImage
。
此时,为了获得一些反馈,我将新裁剪的UIImage
设置为UIImageView
的后备图像。 这是有效的,我可以清楚地看到图像完全按照我想要的方式裁剪。
但是,当我尝试将其保存到相机胶卷时,事情就会停止工作。
我无法保存新创建的endImage
。
正如您所看到的,我添加了一行来保存原始的UIImage
,仅用于比较。 原版正常保存。
另一个令人困惑的事情是传递给image:didFinishSavingWithError:contextInfo:
的NSError
对象image:didFinishSavingWithError:contextInfo:
callback是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进行渲染以将输出作为位图。
您可以通过绘制到较小的图形上下文轻松裁剪。
如果使用CIImage对象初始化UIImage对象,则该属性的值为NULL。
你可以像这样从CIImage生成UIImage:
let lecturePicture = UIImage(data: NSData(contentsOfURL: NSURL(string:"http://sofzh.miximages.com/ios/Xs4RX.jpg")!)!)! let controlsFilter = CIFilter(name: "CIColorControls") controlsFilter.setValue(CIImage(image: lecturePicture), forKey: kCIInputImageKey) controlsFilter.setValue(1.5, forKey: kCIInputContrastKey) let displayImage = UIImage(CGImage: CIContext(options:nil).createCGImage(controlsFilter.outputImage, fromRect:controlsFilter.outputImage.extent()))! displayImage
- 简单的UIView drawRect不被调用
- 使用coregraphics,通过触摸擦除和删除UIImageVIew中的图像
- 从UIImagePickerController抓取video的第一帧?
- 视图控制器上的inheritance目标c
- iPad的模拟器罚款,但iPad上传图片时使用WKWebview崩溃的应用程序
- Sprite Kit bodyAtPoint和bodyInRect返回不正确的值?
- 如何在iPhone的视图中的两个水龙头点之间自动绘制线条
- 如何在Swift中使用NSTimer和NSNotificationCentre来更新UITableViewCells
- DispatchGroup.wait不等