2017-04-21 40 views
1

當我下載一個圖像使用sdwebimage,我在圖像下載操作的- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {爲什麼UIImagePNGRepresentation返回大於數據(10倍以上)圖像的原始數據大小

 UIImage *image = [UIImage sd_imageWithData:self.imageData]; 
     NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL]; 
     image = [self scaledImageForKey:key image:image]; 
     NSLog(@"didCompleteWithError:%@ data lenght:%ld png::%ld,jpg:%ld",self.request.URL,[self.imageData length],[UIImagePNGRepresentation(image) length],[UIImageJPEGRepresentation(image, 1) length]); 

日誌打印原來是

data lenght:163480 png::202498,jpg:131774 

和原始數據長度是與服務器中的圖像文件的確切文件大小,但是當我使用這些原始數據創建圖像,並使用UIImagePNGRepresentation或UIImageJPEGRepresentation獲取UIImage的NSData長度時,似乎p UIImage的ng和jpg表示(不壓縮)將會更大。是什麼讓這發生?

回答

0

PNG文件

PNG格式是無損壓縮的文件格式,這使得它在Web上使用的共同選擇。對於以小文件尺寸存儲線條圖,文本和圖標圖形,PNG是一個不錯的選擇。

由於受到GIF壓縮的專利限制,便攜式網絡圖形是一種無意義的文件格式,旨在替換GIF格式。該項目取得了成功,我們現在可以完全訪問該格式,該格式無需專利,具有很高的壓縮率,並且受到網絡瀏覽器的廣泛支持。 PNG文件主要用於透明圖像,簡單彩色圖像和具有強硬線條的圖像,如文本。有兩種版本的PNG文件:8位PNG(稱爲PNG-8)和24位PNG(稱爲PNG-24)。 PNG-8僅限於256種索引顏色,而PNG-24則有數百萬種。

JPEG文件

聯合圖像專家組創建的文件格式,創造性地命名爲JPEG \ JA-PEG \,處理複雜的彩色照片圖像。將文件保存爲JPEG時,用戶可以選擇質量與壓縮比。更多的壓縮會導致更小的文件大小,但是會失去質量。顯然,較少的壓縮會導致較大的文件大小,但也會產生較高質量的圖像。關於JPEG壓縮的好處是,你通常可以找到一個平衡點,看起來不錯,而且文件很小。不幸的是,JPEG文件沒有透明度。此外,文件格式是有損的,這意味着每次壓縮時都會丟失一些數據。如果出於某種原因多次重新保存同一圖像,圖像質量可能會很低。

JPG格式是一種有損壓縮文件格式。這使得存儲照片的尺寸比BMP更小。由於壓縮,JPG是在Web上使用的常用選擇。爲了以較小的文件尺寸存儲線條圖,文本和圖標圖形,GIF或PNG是更好的選擇,因爲它們是無損的。

JPEG是用於照片和逼真的圖像。 PNG適用於線條藝術,文字沉重的圖像以及顏色很少的圖像。 GIF只是失敗。

+2

那麼爲什麼圖像的png圖像會比圖像的rawdata大? – ximmyxiao

+0

JPEG和PNG使用完全不同的壓縮方法。 JPEG使用基於DCT的有損壓縮方法,以犧牲質量來支持更小的文件大小。 PNG優先考慮質量並使用無損DEFLATE壓縮算法。 JPEG的文件大小可以通過在保存期間調整圖像的質量百分比來減少,而PNG的文件大小不易調整,並且通常需要單獨的程序來進一步壓縮圖像。 檢查這個 - http://www.diffen。com/difference/JPEG_vs_PNG –

+4

是否有任何方法可以獲得uiimage對象的原始數據內容長度?因爲UIImagePNGRepresentation或UIImageJPEGRepresentation工作不正常 – ximmyxiao

相關問題