好的,这就是我正在做的事情:
2a上。如果他没有做任何事情只是保存图片,图片就会保存。
2B。如果他使用任何过滤器,图像视图将更新为过滤后的图片,然后使用相同的方法进行保存。
我的问题:当图片被过滤后,为要保存的照片存储的NSData对象为零。
注意:
使用相同的方法保存两张照片。
我正在使用CIColorControls来修改图片。
当用户过滤照片时,请将照片重置为其照片 原始状态,它可以保存。
代码:
viewdidLoad:
self.imgPicture.image = _photo; //setting the picture taken from camera in imageView
_tempPhoto = [_photo copy]; //storing it so it can be reset
保存文件(视图中的图像):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd-HH-mm"];
NSString *imageName = [formatter stringFromDate:[NSDate date]];
[NSError *err = nil;
[UIImageJPEGRepresentation(self.imgPicture.image, 0.3) writeToFile:[basePath stringByAppendingPathComponent:imageName]
options:NSDataWritingAtomic
error:&err];
其中一种过滤方法:
- (IBAction)softFilter:(id)sender {
_photo = [self filterImageWithBrightness:-0.15 AndContrast:0.95];
[self.imgPicture setImage:_photo];
}
错误始终记录(null)。 我完全没有想法,我已经在这3天了,对于我的生活,我无法弄清楚出了什么问题。最重要的是,我知道这可能是非常愚蠢的事情。但欢迎任何答案/评论:)
答案 0 :(得分:1)
为了保留您修改过的图像,您可以使用:
CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)}];
CIImage *filteredImageData = [filter valueForKey:@"outputImage"];
CGImageRef cgImage = [context createCGImage:filteredImageData fromRect:[filteredImageData extent]];
UIImage *filteredImage = [UIImage imageWithCGImage:cgImage scale:[_photo scale] orientation:UIImageOrientationUp];
答案 1 :(得分:0)
Zil这是一种可以保存照片的方法。
-(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
if ([[extension lowercaseString] isEqualToString:@"png"]) {
NSString *lala=[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]];
[UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil];
[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:lala]];
} else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
NSString *lala=[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]];
[UIImageJPEGRepresentation(image, 0.5) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
[self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:lala]];
}
}
唯一的区别是NSAtomicWrite参数。
也许它可以帮到你。