使用 UIImageJPEGRepresentation 保存图像并用作 UIImage
Posted
技术标签:
【中文标题】使用 UIImageJPEGRepresentation 保存图像并用作 UIImage【英文标题】:Saving image with UIImageJPEGRepresentation and using as UIImage 【发布时间】:2013-11-30 13:10:14 【问题描述】:我正在尝试将图像 from here 保存到设备的 Documents 目录,但我的方法不起作用。 不得不提的是,这种方法适用于图片like this:
我已经使用 iExplorer 检查了 Document 的目录,并且图像以正确的名称保存到正确的路径中,我还尝试手动下载图像并将其放入 Documents 目录,并且它工作正常。我下载的图片大小为900kbyte,但代码下载的图片大小为3.1mbyte。
我的代码是:
UIImage *staticResortMap = [self downloadImageWithStringURL:resort.staticPhotoPath];
staticPhotoPath = [_fileManager saveImage:staticResortMap usingName:kImageBaseNameResortStaticMap];
- (UIImage *)downloadImageWithStringURL:(NSString *)stringURL
NSURL *photoURL = [NSURL URLWithString:stringURL];
NSData *data = [[NSData alloc] initWithContentsOfURL:photoURL];
return [[UIImage alloc] initWithData:data];
- (NSString *)saveImage:(UIImage *)image usingName:(NSString *)name
NSString *directory = [_documentsDirectory stringByAppendingPathComponent:kDirectoryNameResortResources];
NSError * error = nil;
[_fileManager createDirectoryAtPath:directory
withIntermediateDirectories:YES
attributes:nil
error:&error];
if (error != nil)
NSLog(@"error creating directory: %@", error);
NSString *path = [directory stringByAppendingPathComponent:name];
[UIImageJPEGRepresentation(image, .9f) writeToFile:path atomically:YES];
return path;
我尝试过像这样使用保存的图像:
UIImage *image = [UIImage imageNamed:@"/var/mobile/Applications/0C62F621-C823-4DE2-B1CD-796EBAA459FB/Documents/resort_resources/static_map_image.jpg"];
UIImage *image1 = [UIImage imageNamed:@"/var/mobile/Applications/0C62F621-C823-4DE2-B1CD-796EBAA459FB/Documents/resort_resources/static_map_image.png"];
UIImage *image2 = [UIImage imageNamed:@"static_map_image.jpg"];
UIImage *image3 = [UIImage imageNamed:@"static_map_image.png"];
我的问题是,当我将图像保存到 Document 目录并尝试使用函数 [UIImage imagenamed:""]
进行分配时,函数返回 nil。但是,当我从互联网上的其他 URL 保存图像时,它正在工作。我知道的 pid 听起来很傻。
我做错了什么?
【问题讨论】:
【参考方案1】:像这样检索图像文档子目录:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *pathToDocumentsDir = [paths objectAtIndex:0];
NSString *filePath = [pathToDocumentsDir stringByAppendingPathComponent:@"resort_resources"]; // Get path of your subdirectory
filePath = [filePath stringByAppendingPathComponent:@"static_map_image.jpg"];// Full path of your image
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
【讨论】:
【参考方案2】:用 Swift
试试这个// Get a document url (path)
func getDocumentsDirectory() -> URL
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentsDirectory = paths[0]
return documentsDirectory
if let image = UIImage(named: "example.png")
if let data = UIImageJPEGRepresentation(image, 0.8)
let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
try? data.write(to: filename)
【讨论】:
以上是关于使用 UIImageJPEGRepresentation 保存图像并用作 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?