iPhone - 将 UIImage 添加到文件夹

Posted

技术标签:

【中文标题】iPhone - 将 UIImage 添加到文件夹【英文标题】:iPhone - Add UIImage to Folder 【发布时间】:2014-12-03 23:38:25 【问题描述】:

我的 Xcode ios 应用中有一个名为 PhotoSet 的文件夹。我想将 UIImage 转换为 jpg 并将其放入文件夹中。这是我到目前为止所拥有的(顺便说一下,如果它完全相关,那么 UIImage 是从用户拍摄的照片中获取的):

NSData * imageData = UIImageJPEGRepresentation(chosenImage, 1.0);
if (imageData != nil) 
    [imageData writeToFile:@"/Users/Toly/Desktop/PhotoMap/PhotoMap/PhotoSet/test.jpg" atomically:YES];

我没有收到任何错误或警告。但是,没有图片被保存到任何文件夹中。我该怎么办?

【问题讨论】:

你认为你的iPhone有这样的目录结构吗(提示:没有)?您是否检查了对writeToFile: 的调用的返回值?您需要写入应用程序沙箱中的有效路径。做一些搜索。这已经在这里讨论过很多次了。 模拟器实际上应该将图像保存到桌面。 【参考方案1】:

您需要写入实际位于 iPhone 上的目录。大多数情况下,您会想要写入文档目录。你可以像这样得到它的路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

这为您提供了基本文档目录,如果您想将文件夹放在子目录中,您需要先创建该文件夹。

NSString *folderPath = [documentsDirectory stringByAddingPathComponent:@"myFolder/images"];
NSError *error = nil;
NSFileManager *fm = [[NSFileManager alloc] init]
[fm createDirectoryAtPath:folderPath withIntermediateDirectories:YES attributes:nil error:&error];

然后要将您的图像数据保存到该文件夹​​,您将执行以下操作

NSString *imageDataPath = [folderPath stringByAppendingPathComponent:@"myImage"];
BOOL success = [imageData writeToFile:imageDataPath];

此外,您可以对 imageDataPath 进行 NSLog 记录,它会为您提供保存文件的确切位置,以便您在使用 iOS 模拟器时导航到 finder 中的实际文件。

【讨论】:

【参考方案2】:

您的手机不包含镜像文件“/Users/Toly/Desktop/PhotoMap/PhotoMap/PhotoSet/test.jpg”的数据结构

如果您希望图像保留在内存中,请尝试使用 nsuserdefaults、xcassets 或 Coredata。如果您绝对打算写入文件,请查看下面的 NSCoding 和 NSFileManager 教程:

http://www.raywenderlich.com/1914/nscoding-tutorial-for-ios-how-to-save-your-app-data

【讨论】:

不要使用NSUserDefaults 来持久化图像。将其写入文件。

以上是关于iPhone - 将 UIImage 添加到文件夹的主要内容,如果未能解决你的问题,请参考以下文章

UIImage 在 iPhone 上保存带有文件名的图像

左侧单点触控 iphone 上带有圆角的 UIImage

UIImage 在 iPhone 上保存带有文件名的图像

无法从 iPhone 文档目录位置中的已保存文件重新加载 UIImage

iPhone保存的png在我加载回来后不一样了

iPhone合并UIImage和CAF Audio到AV文件