2012-07-04 128 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