2012-07-04 133 views
2

我有一个自定义单元格与缩略图图像,用户可以从他们的相册中选择。我知道将图像保存到Core Data会导致性能下降,我应该使用文件系统。iPhone保存图像

任何人都会推荐一些很好的教程。如果我没有将图像存储在核心数据中,我应该如何存储核心数据。

我将存储较大的图像,而不仅仅是缩略图。

回答

4
UIImage*image = [UIImage imageNamed:@"the image you wish to save.jpg"]; 

//build the path for your image on the filesystem 
NSArray *dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsDir = [dirPath objectAtIndex:0]; 
NSString* photoName = @"imageName.jpg"; 
NSString *photoPath = [docsDir stringByAppendingPathComponent:photoName]; 

//get the imageData from your UIImage 
float imageCompression = 0.5; 
NSData *imageData = UIImageJPEGRepresentation(image, imageCompression); 

//save the image     
if(![imageData writeToFile:path atomically:YES]){ 
    return FALSE; 
} 

//store the imagePath to your model 
photoModal.filePathImage = photoPath; 

TIPS:

  • 避免重名,这样你就不会覆盖exisitng文件(不要担心,你会得到一个警告)
  • 记得删除照片时模式正在被删除
  • 建立你的模型,如匹配的逻辑路径和文件夹结构 - album.photo应该有一个文件夹命名的专辑,它应该存储的文件,有助于当你删除相册样板
+0

关于避免重复图像名称的任何建议,使它们独一无二 – Vikings

+0

我发现的最佳方式是通过添加像globalApp模型或NSUserDefaults这样的持久位置的计数器来创建多少照片,然后可以将这个数字添加到每个文件名。 –

+0

第二个选项是为每张照片生成一个唯一的ID,但这些都是凌乱和坏看... –

1

您可以将图像存储在Application Documents Folder中,并将图像的路径保存在CoreData或sqlite中。参考图片及其路径。

2

你应该有自己的核心数据DB两个领域:thumbnailPathNSStringoriginalPathNSString

随着你在特定路径创建缩略图和原始图像文件管理器。所以你将有:..../thumbs/myPicture_thumb.jpg AND ..../originals/myPicture.jpg然后,你只需将这两条路径存储到你的核心数据分贝。

当你婉显示他们中的一个,你中庸之道使用UIImage方法:imageWithContentsOfFile

这是所有

+0

谢谢,我会尝试 – Vikings