詳解IOS開發(fā)中圖片上傳時兩種圖片壓縮方式的比較
IOS 圖片上傳時兩種圖片壓縮方式的比較
上傳圖片不全面的想法:把圖片保存到本地,然后把圖片的路徑上傳到服務器,最后又由服務器把路徑返回,這種方式不具有擴展性,如果用戶換了手機,那么新手機的沙盒中就沒有服務器返回的圖片路徑了,此時就無法獲取之前已經(jīng)上傳了的頭像了,在項目中明顯的不可行。
上傳圖片的正確方式:上傳頭像到服務器一般是將圖片NSData上傳到服務器,服務器返回一個圖片NSString地址,之后再將NSString的路徑轉為url并通過url請求去更新用戶頭像(用戶頭像此時更新的便是NSString)
代碼為:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
// 設置請求格式
manager.requestSerializer = [AFJSONRequestSerializer serializer];
// 設置返回格式
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager POST:[NSString stringWithFormat:@"%@%@", XLImageServerHost, functionName] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
/////傳的圖片數(shù)據(jù)放這里
NSData *eachImgData = UIImageJPEGRepresentation(image, 0.5);
[formData appendPartWithFileData :eachImgData name : @"upload" fileName : @"picture.jpg" mimeType : @"image/jpeg" ];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
///請求成功
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
///請求失敗
}];
現(xiàn)在來介紹一下:UIImageJPEGRepresntation 和 UIImagePNGRepresontation的區(qū)別
在Iphone上有兩種讀取圖片數(shù)據(jù)的簡單方法: UIImageJPEGRepresentation和UIImagePNGRepresentation.
UIImageJPEGRepresntation:
UIImageJPEGRepresentation方法在耗時上比較少 而UIImagePNGRepresentation耗時操作時間比較長
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
使用UIImagePNGRepresentation取得照片時候可能會造成卡頓的現(xiàn)象
在Iphone上有兩種讀取圖片數(shù)據(jù)的簡單方法: UIImageJPEGRepresentation和UIImagePNGRepresentation.
UIImagePNGRepresontation:
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.如果對圖片的清晰度要求不高,還可以通過設置 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ù)量 ,而且從視角角度看,圖片的質量并沒有明顯的降低.因此,在讀取圖片數(shù)據(jù)內(nèi)容時,建議優(yōu)先使用UIImageJPEGRepresentation,并可根據(jù)自己的實際使用場景,設置壓縮系數(shù),進一步降低圖片數(shù)據(jù)量大小.
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
iOS優(yōu)化UITableViewCell高度計算的一些事兒
這iOS開發(fā)中對于UITableViewCell高度自適應的文章已經(jīng)很多很多,但都不是自己所需要的,下面篇文章主要給大家介紹了關于iOS優(yōu)化UITableViewCell高度計算的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2018-11-11
iOS內(nèi)存錯誤EXC_BAD_ACCESS的解決方法
iOS開發(fā),最郁悶的莫過于程序毫無征兆地就崩潰了,用bt命令打出調(diào)用棧,給出的是一堆系統(tǒng)EXC_BAD_ACCESS的信息,根本沒辦法定位問題出現(xiàn)在哪里2013-06-06
解決Xcode 8構建版本iTunes Connect獲取不到應用程序狀態(tài)的辦法
這篇文章主要介紹了關于解決Xcode 8構建版本iTunes Connect獲取不到應用程序狀態(tài)的辦法,需要的朋友可以參考下2017-03-03
iOS應用開發(fā)中使UITextField實現(xiàn)placeholder屬性的方法
這篇文章主要介紹了iOS應用開發(fā)中使UITextField實現(xiàn)placeholder屬性的方法,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下2016-04-04

