如何从 iPhone 中的目录中检索图像?

Posted

技术标签:

【中文标题】如何从 iPhone 中的目录中检索图像?【英文标题】:How to retrieve the images from a directory in iPhone? 【发布时间】:2011-12-06 08:49:32 【问题描述】:

我面临一个问题。我的 Supporting Files 组下有一个名为 Album 的目录。在这个目录中,我有一些图像。在我的图像编辑应用程序中,我想将编辑后的图像保存在我的相册目录中。我尝试使用以下代码将图像保存在我的相册目录中

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSString *albumPath = [bundleRoot stringByAppendingString:@"/Album"];
NSString *savedImagePath = [bundleRoot stringByAppendingPathComponent: @"newImage11.jpeg" ]; UIGraphicsBeginImageContext(drawImage.image.size); 
CGContextRef ctx = UIGraphicsGetCurrentContext();
 [drawImage.layer renderInContext:ctx]; 
UIImage *editedImage = UIGraphicsGetImageFromCurrentImageContext();
NSData *editedImageData = UIImageJPEGRepresentation(editedImage, 1.0); UIGraphicsEndImageContext(); 
[editedImageData writeToFile:savedImagePath atomically:YES];

这里的 drawImage 是 UIImageView 的 IBOutlet,它保存了图像。这段代码在我的相册目录中保存了一个文件 newImage11.jpeg,它也有一个大小。但是当我从相册目录中检索图像时,它给了我一个空白图像。我使用以下代码检索图像

NSString *img = [onlyJPGs objectAtIndex:currentIndex+numberToAdd]; 
UIImage *tempImage = [UIImage imageNamed:img]; 
imageButton.tag = img; 
[imageButton setImage:tempImage forState:UIControlStateNormal]; 
[imageButton addTarget:nil action:@selector(goToEdit:) forControlEvents:UIControlEventTouchUpInside]; 
currentIndex+=numberToAdd;

onlyJPGs 是一个数组,其中包含专辑目录中包含的所有图像的名称。我确信我的应用程序正在将图像保存在专辑目录中,因为当我使用终端在 ImageEditing.app 中列出专辑目录的内容时,它会向我显示 newImage11.jpeg 文件。任何形式的帮助都会很有意义。

【问题讨论】:

【参考方案1】:

问题很简单,您试图将编辑后的图像保存到包中。实际上应用程序包是“只读”的。对于这种读写访问,您可以使用文档目录或库。 可以通过sn-p代码获取文档目录路径。

NSString *path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

【讨论】:

【参考方案2】:

首先你不能写bundlePath,这个hole应用包是只读的。

其次,您确定您在项目的资源组中创建了目录,而不是组(组文件夹图标为黄色,文件夹为蓝色)。

在构建应用程序时省略了作为组的黄色文件夹,该文件夹中的所有文件都位于应用程序包的根目录中。

您可以将文件写入文档目录:

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

这些目录将自动与 iCould 同步,并且根据 Apple 的规定,应该只包含用户生成的文件。您的应用程序可以重新创建或可以再次下载的任何文件都应该放在缓存目录中:

NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

【讨论】:

是的,我在资源组中创建了一个目录。它在 Xcode 窗口中显示为蓝色。 但我想检索图像并将其保存在单个目录(相册)中。如果 bundlePath 是只读的,那么我如何将图像保存在我的应用程序文件夹内的相册目录中? 你不能!您需要将图像保存在文档目录中。 捆绑包是在编译时创建的,您可以在编译应用程序时添加图像。但之后它是只读的。 可以在编译的时候放一些数据到文档目录吗?

以上是关于如何从 iPhone 中的目录中检索图像?的主要内容,如果未能解决你的问题,请参考以下文章

保存用相机拍摄或从相机胶卷中选择的图像时出现长时间延迟 - iPhone

如何通过iphone中的sqlite获取路径来显示文档目录中保存的图像

如何从我的 iPhone App 文档目录中选择所有图像

iPhone:如何使用 JSON 将图像数据发送到服务器?

如何在 iPhone 应用程序的 UITableCell 中的背景中加载图像

Android:如何创建图像查看器/旋转器