如何正确保存和读取图像?
Posted
技术标签:
【中文标题】如何正确保存和读取图像?【英文标题】:How to correctly save and read the image? 【发布时间】:2018-12-19 13:59:59 【问题描述】:如何正确保存和读取图片?每次更新应用程序版本后,程序都想再次保存新图片。
保存图片:
+(void)setImage:(UIImage*)image
NSData *imageData = UIImageJPEGRepresentation(image, 1);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:@"image.jpg"];
BOOL writtenToFile = [imageData writeToFile:imagePath atomically:YES];
[[NSUserDefaults standardUserDefaults] setObject:imagePath forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
阅读图片:
+(UIImage*)getImage
NSString *imagePath = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if (imagePath)
return [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]];
return nil;
UserDefaults 中的 Set Object 始终为空。
【问题讨论】:
【参考方案1】:不要保存用户默认的图像完整路径,因为它包含一个容器 GUID。 此容器 GUID 会在更新后发生变化。
- (void)setImage:(UIImage *)image
NSData *imageData = UIImageJPEGRepresentation(image, 1);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:@"image.jpg"];
BOOL writtenToFile = [imageData writeToFile:imagePath atomically:YES];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
+ (UIImage *)getImage
BOOL imageExists = [[NSUserDefaults standardUserDefaults] boolForKey:key];
if (imageExists)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:@"image.jpg"];
return [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]];
return nil;
【讨论】:
为什么不使用NSUserDefaults boolForKey:
来检查存储值呢?
@rmaddy 完全正确,应该使用boolForKey:
另请注意,您有两个名为imagePath
的变量,其中一个根本不是路径。在 Objective-C 上是 BOOL
,而不是 Bool
。以上是关于如何正确保存和读取图像?的主要内容,如果未能解决你的问题,请参考以下文章
opencv如何将lena.jpg的灰度值读取出来并在计算机上保存下来