【发布时间】:2011-10-17 17:45:43
【问题描述】:
我正在开发一个 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 的数据库或应用程序子目录中。太浪费空间了。
在性能方面,最好的方法是什么?
另外,如果我将它们存储在一个目录中,用户可以访问该目录并删除它们吗?
感谢您分享您的智慧!
【问题讨论】:
标签: objective-c image path camera store