NSData对象因未知原因而空(保存图像)

时间:2014-09-26 07:41:45

标签: ios image file save nsdata

好的,这就是我正在做的事情:

  1. 加载imageView(带图片),并让用户选择添加过滤器。
  2. 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天了,对于我的生活,我无法弄清楚出了什么问题。最重要的是,我知道这可能是非常愚蠢的事情。但欢迎任何答案/评论:)

2 个答案:

答案 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参数。

也许它可以帮到你。