中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS把圖片緩存到本地的幾種方法(總結)

發布時間:2020-08-26 20:28:15 來源:腳本之家 閱讀:1138 作者:jingxian 欄目:移動開發

把圖片緩存到本地,在很多場景都會用到,如果只是存儲文件信息,那建一個plist文件,或者數據庫就能很方便的解決問題,但是如果存儲圖片到沙盒就沒那么方便了。這里簡單介紹兩種保存圖片到沙盒的方法。

一、把圖片轉為base64的字符串存到數據庫中或者plist文件中,然后用到的時候再取出來

 //獲取沙盒路徑,
 NSString *path_sandox = NSHomeDirectory();
 //創建一個存儲plist文件的路徑
 NSString *newPath = [path_sandox stringByAppendingPathComponent:@/Documents/pic.plist];
 NSMutableArray *arr = [[NSMutableArray alloc] init];
 UIImage *image = [UIImage imageNamed:@"1.png"];
  
 /*
  把圖片轉換為Base64的字符串 

  在iphone上有兩種讀取圖片數據的簡單方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. 
  
  UIImageJPEGRepresentation函數需要兩個參數:圖片的引用和壓縮系數.而UIImagePNGRepresentation只需要圖片引用作為參數.通過在實際使用過程中,
  比較發現: UIImagePNGRepresentation(UIImage* image) 要比UIImageJPEGRepresentation(UIImage* image, 1.0) 返回的圖片數據量大很多.
  譬如,同樣是讀取攝像頭拍攝的同樣景色的照片, UIImagePNGRepresentation()返回的數據量大小為199K ,
  而 UIImageJPEGRepresentation(UIImage* image, 1.0)返回的數據量大小只為140KB,比前者少了50多KB.
  如果對圖片的清晰度要求不高,還可以通過設置 UIImageJPEGRepresentation函數的第二個參數,大幅度降低圖片數據量.譬如,剛才拍攝的圖片, 
  通過調用UIImageJPEGRepresentation(UIImage* image, 1.0)讀取數據時,返回的數據大小為140KB,但更改壓縮系數后,
  通過調用UIImageJPEGRepresentation(UIImage* image, 0.5)讀取數據時,返回的數據大小只有11KB多,大大壓縮了圖片的數據量 ,
  而且從視角角度看,圖片的質量并沒有明顯的降低.因此,在讀取圖片數據內容時,建議優先使用UIImageJPEGRepresentation,
  并可根據自己的實際使用場景,設置壓縮系數,進一步降低圖片數據量大小.
  */
 NSData *_data = UIImageJPEGRepresentation(image, 1.0f);
 //將圖片的data轉化為字符串
 NSString *strimage64 = [_data base64EncodedString];
 
 [arr addObject:image64]; 
  //寫入plist文件 
 if ([arr writeToFile:newPath atomically:YES]) {  
 NSLog(@"寫入成功"); 
 };
  //可以到沙河路徑下查看plist文件中的圖片數據 
 //這樣就存起來的,然后用到的時候再利用存儲的字符串轉化為圖片
 //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();
 //設置一個圖片的存儲路徑
 NSString *imagePath = [path_document stringByAppendingString:@"/Documents/pic.png"];
 //把圖片直接保存到指定的路徑(同時應該把圖片的路徑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];

以上這篇iOS把圖片緩存到本地的幾種方法(總結)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安多县| 洛浦县| 清镇市| 科技| 乐都县| 定南县| 宝清县| 龙游县| 巴彦淖尔市| 南昌县| 凤翔县| 黑河市| 新宾| 东山县| 宾川县| 通辽市| 陆川县| 新和县| 凉城县| 栖霞市| 南召县| 博罗县| 应城市| 宜州市| 舞阳县| 宜城市| 奉化市| 太和县| 庆元县| 怀来县| 安西县| 晴隆县| 茂名市| 望奎县| 玛曲县| 高唐县| 张家口市| 乌什县| 获嘉县| 抚宁县| 麻城市|