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

Objective c 在iPad应用程序中存储和使用来自相机或相册的图像,objective-c,image,path,camera,store,Objective C,Image,Path,Camera,Store,我正在开发一个iPad应用程序,让用户在其中创建一个对象。我还允许他/她向该对象添加10张图片。他们可以从相机卷中选择这些照片,也可以拍摄一张新照片(如果iPad有摄像头的话) 我现在的问题是,存储这些图片的最佳方式是什么?在我看来,最好的方法是使用UIImageWriteToSavedPhotosAlbum(image,self,@selector(image:finishedsavingwitheror:contextInfo:),nil)方法。这样我就可以在iPad的相册中存储(或使用)图

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

我现在的问题是,存储这些图片的最佳方式是什么?在我看来,最好的方法是使用
UIImageWriteToSavedPhotosAlbum(image,self,@selector(image:finishedsavingwitheror: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数据库或应用程序子目录中。这是浪费空间

在性能方面,最好的方法是什么

而且,如果我将它们存储在一个目录中,用户可以访问这个目录并删除它们吗


谢谢分享你的智慧

我认为您无法获得使用
UIImageWriteToSavedPhotosAlbum保存的图像的URL/路径

即使这是可能的,我建议你仍然在你的应用程序中存储图像。通过将图像导出到照片应用程序,您将有效地解除图像与应用程序及其创建对象的关联

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


关于保存方法(BLOB或文件),两者均可接受。我建议您在保存之前考虑调整图像大小,除非需要完整大小的原始图像。有很多资源可用于执行此操作(例如)

但我不需要禁止他们删除图片。如果他们这样做了,那是他们的错误,我可以检查一下图像是否存在。如果没有,我不会尝试加载它。但至少它可以让用户按照他们想要的方式组织图像,而且我不会使用实际需要的两倍内存容量。是的,我很感激它可以非常优雅地处理,我只是在考虑用户体验。(假设你可以根据应用程序的目的调整图像大小,内存将不到原来的两倍)。感谢你将我链接到有用的调整大小线程。那我就用这个办法。将图像大小调整为1024x768,并将其作为BLOB存储到数据库中。