iOS把圖片緩存到本地的兩種方法

概述

  • 把圖片緩存到本地状婶,在很多場景都會用到,如果只是存儲文件信息伏蚊,那建一個plist文件立轧,或者數(shù)據(jù)庫就能很方便的解決問題,但是如果存儲圖片到沙盒就沒那么方便了躏吊。這里簡單介紹兩種保存圖片到沙盒的方法肺孵。

一.把圖片轉(zhuǎn)為base64的字符串存到數(shù)據(jù)庫中或者plist文件中,然后用到的時候再取出來

 //獲取沙盒路徑颜阐,  
 NSString *path_sandox = NSHomeDirectory();  
 //創(chuàng)建一個存儲plist文件的路徑  
 NSString *newPath = [path_sandox stringByAppendingPathComponent:@/Documents/pic.plist];  
 NSMutableArray *arr = [[NSMutableArray alloc] init];  
 UIImage *image = [UIImage imageNamed:@"1.png"];  
       
 /* 
 
  把圖片轉(zhuǎn)換為Base64的字符串   
 
 
  在iphone上有兩種讀取圖片數(shù)據(jù)的簡單方法: UIImageJPEGRepresentation和UIImagePNGRepresentation.  
   
  UIImageJPEGRepresentation函數(shù)需要兩個參數(shù):圖片的引用和壓縮系數(shù).而UIImagePNGRepresentation只需要圖片引用作為參數(shù).通過在實際使用過程中, 
  比較發(fā)現(xiàn): UIImagePNGRepresentation(UIImage* image) 要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的圖片數(shù)據(jù)量大很多. 
  譬如,同樣是讀取攝像頭拍攝的同樣景色的照片, UIImagePNGRepresentation()返回的數(shù)據(jù)量大小為199K , 
  而 UIImageJPEGRepresentation(UIImage* image, 1.0)返回的數(shù)據(jù)量大小只為140KB,比前者少了50多KB. 
  如果對圖片的清晰度要求不高,還可以通過設(shè)置 UIImageJPEGRepresentation函數(shù)的第二個參數(shù),大幅度降低圖片數(shù)據(jù)量.譬如,剛才拍攝的圖片,  
  通過調(diào)用UIImageJPEGRepresentation(UIImage* image, 1.0)讀取數(shù)據(jù)時,返回的數(shù)據(jù)大小為140KB,但更改壓縮系數(shù)后, 
  通過調(diào)用UIImageJPEGRepresentation(UIImage* image, 0.5)讀取數(shù)據(jù)時,返回的數(shù)據(jù)大小只有11KB多,大大壓縮了圖片的數(shù)據(jù)量 , 
  而且從視角角度看,圖片的質(zhì)量并沒有明顯的降低.因此,在讀取圖片數(shù)據(jù)內(nèi)容時,建議優(yōu)先使用UIImageJPEGRepresentation, 
  并可根據(jù)自己的實際使用場景,設(shè)置壓縮系數(shù),進一步降低圖片數(shù)據(jù)量大小. 
  */  
  
 NSData *_data = UIImageJPEGRepresentation(image, 1.0f);  
 //將圖片的data轉(zhuǎn)化為字符串  
 NSString *strimage64 = [_data base64EncodedString];  
  
 [arr addObject:image64];      
  //寫入plist文件      
 if ([arr writeToFile:newPath atomically:YES]) {         
 NSLog(@"寫入成功");      
};  
 //可以到沙河路徑下查看plist文件中的圖片數(shù)據(jù)   
  
 //這樣就存起來的平窘,然后用到的時候再利用存儲的字符串轉(zhuǎn)化為圖片  
  
 //NSData *_decodedImageData = [[NSData alloc] initWithBase64Encoding:image64];  這是iOS7之前的一個方法   
   
 NSData *_decodedImageData = [[NSData alloc]initWithBase64EncodedString:strimage64 options:NSDataBase64DecodingIgnoreUnknownCharacters];  
 UIImage *_decodedImage = [UIImage imageWithData:_decodedImageData];  
   
 //可以打印下圖片是否存在  
 NSLog(@"===Decoded image size: %@", NSStringFromCGSize(_decodedImage.size)); 

二.把圖片直接保存到沙盒中,然后再把路徑存儲起來凳怨,等到用圖片的時候先獲取圖片的路徑瑰艘,再通過路徑拿到圖片

//拿到圖片  
UIImage *image2 = [UIImage imageNamed:@"1.png"];   
NSString *path_document = NSHomeDirectory();  
//設(shè)置一個圖片的存儲路徑  
NSString *imagePath = [path_document stringByAppendingString:@"/Documents/pic.png"];  
//把圖片直接保存到指定的路徑(同時應(yīng)該把圖片的路徑imagePath存起來是鬼,下次就可以直接用來取)  
[UIImagePNGRepresentation(image2) writeToFile:imagePath atomically:YES];  
  • 下次利用圖片的地址直接來拿圖片
UIImage *getimage2 = [UIImage imageWithContentsOfFile:imagePath];  
NSLog(@"image2 is size %@",NSStringFromCGSize(getimage2.size));

同時附上獲取沙盒目錄的代碼

//Home目錄

沙盒文件目錄獲取代碼:

NSString *homeDirectory = NSHomeDirectory(); 

//Document目錄

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    
NSString *path = [paths objectAtIndex:0];  

//Cache目錄

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);    
NSString *path = [paths objectAtIndex:0];  

//Libaray目錄

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);   
NSString *path = [paths objectAtIndex:0];  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末紫新,一起剝皮案震驚了整個濱河市均蜜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芒率,老刑警劉巖囤耳,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偶芍,居然都是意外死亡充择,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門匪蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椎麦,“玉大人,你說我怎么就攤上這事材彪」劭妫” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵段化,是天一觀的道長嘁捷。 經(jīng)常有香客問我,道長显熏,這世上最難降的妖魔是什么雄嚣? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮佃延,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夷磕。我一直安慰自己履肃,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布坐桩。 她就那樣靜靜地躺著尺棋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绵跷。 梳的紋絲不亂的頭發(fā)上膘螟,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音碾局,去河邊找鬼荆残。 笑死,一個胖子當著我的面吹牛净当,可吹牛的內(nèi)容都是我干的内斯。 我是一名探鬼主播蕴潦,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俘闯!你這毒婦竟也來了潭苞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤真朗,失蹤者是張志新(化名)和其女友劉穎此疹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遮婶,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蝗碎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹭睡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衍菱。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肩豁,靈堂內(nèi)的尸體忽然破棺而出脊串,到底是詐尸還是另有隱情,我是刑警寧澤清钥,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布琼锋,位于F島的核電站,受9級特大地震影響祟昭,放射性物質(zhì)發(fā)生泄漏缕坎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一篡悟、第九天 我趴在偏房一處隱蔽的房頂上張望谜叹。 院中可真熱鬧,春花似錦搬葬、人聲如沸荷腊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽女仰。三九已至,卻和暖如春抡锈,著一層夾襖步出監(jiān)牢的瞬間疾忍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工床三, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留一罩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓撇簿,卻偏偏與公主長得像擒抛,于是被迫代替她去往敵國和親推汽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 把圖片緩存到本地歧沪,在很多場景都會用到歹撒,如果只是存儲文件信息,那建一個plist文件诊胞,或者數(shù)據(jù)庫就能很方便的解決問題...
    饅頭壓扁就是餅閱讀 6,284評論 1 1
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,130評論 30 470
  • 沙盒 Plist Preference偏好設(shè)置 NSKeyedArchiver歸檔 / NSKeyedUnarch...
    追風者366閱讀 3,331評論 0 6
  • 沙盒中的目錄 AppName.app 內(nèi)容:此目錄包含了應(yīng)用程序及其所有資源文件暖夭。 讀寫操作:不能寫入該目錄,可以...
    devRen閱讀 14,989評論 0 7
  • 據(jù)說Ukulele是一百多年前來自葡萄牙的專業(yè)手工藝人和樂器制作家?guī)У较耐牡哪旃拢數(shù)厝梭@異于這種琴音色之優(yōu)美以及演...
    seg閱讀 137評論 0 0