在iPad应用程序中存储和使用来自相机或相册的图像

时间:2011-08-01 20:01:28

标签: objective-c image path camera store

我正在开发一个iPad应用程序,我让用户创建一个对象。我也允许他/她为这个对象添加10张图片。他们可以从相机胶卷中选择这些照片或者拍摄一张新照片(如果iPad有相机)。

我现在的问题是存储这些照片的最佳方式是什么?在我看来,最好的方法是使用UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:finishedSavingWithError:contextInfo:), nil);方法。这样我就可以随时存储(或使用)iPad相册中的图像。但在这种情况下,我需要能够在数据库中存储某些东西,以便以后能够再次检索图像。那么...... 如何在finishedSavingWithError:contextInfo:方法中获取文件路径的URL ,以存储在数据库中?

实现目标的另一种方法是将它们保存到私人文件夹中:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
        if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
               UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
               imageView.image = image;

               [ImageManager saveImage:image atIndex:0];
       }
}

我的saveImage方法执行以下操作:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]]; 
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];

或者我应该将图像作为BLOB存储在sqlite数据库中吗?

就我个人而言,我认为最后两种可能性会受到打击,因为基本上你将两次存储都存在。如果您从图库中选择图像,它将在本地(您的图库) PLUS 存储在数据库或应用程序子目录中。这是浪费空间。

这样做的最佳方法是什么,表现明智?

而且,如果我将它们存储在一个目录中,用户是否可以访问该目录并将其删除?

感谢分享你的智慧!

1 个答案:

答案 0 :(得分:0)

我认为您无法获得使用UIImageWriteToSavedPhotosAlbum

保存的图片的网址/路径

即使这是可能的,我建议您仍然将图像存储在应用中。通过将它们导出到“照片”应用,您可以有效地取消应用中的图像以及为其创建的对象的关联。

例如,如果有人从照片应用中删除了图片而没有意识到/记住图片与您的应用相关联,会发生什么?你无法阻止这种情况。

关于保存方法(BLOB或文件)是可以接受的。我建议您在保存前调整图像大小,除非需要全尺寸原始图像。这样做有很多资源(例如UIImage: Resize, then Crop