iOS開發(fā)之壓縮圖片

導讀:

iOS 圖片壓縮方法- 簡書
iOS圖片壓縮處理- 陳斌彬的技術博客

疑問

當我導入一張圖片的時候然后讀取這張圖片的時候發(fā)現(xiàn)這張圖片通過以下這句代碼總是比我們的原圖要大,而且有時候大很多,有時候大的不是特別多:

UIImage *image = [UIImage imageNamed:@"kod.jpg"];
NSData * imageData = UIImageJPEGRepresentation(image, 1);
NSLog(@"imageData = %zd",[imageData length]);

那這個時候我就有疑問了,我的原圖難道不是最大的嗎?所以這個時候就查看一下官方文檔看下究竟:

Snip20170828_90.png
compressionQuality  
The quality of the resulting JPEG image, expressed as a value from 0.0 to 1.0. 
The value 0.0 represents the maximum compression (or lowest quality) while the value 1.0 represents the least compression (or best quality).

譯文:

壓縮質量
JPEG圖像的質量的值范圍是0.0-1.0
質量值為0時代表的是最大的壓縮或者最低的圖片質量,當值為1的時候代表的是最低的壓縮或者最好的圖片質量

經過翻譯之后發(fā)現(xiàn)好像找到了一點解釋,就是說當前這張圖片的最好質量并不就是原圖,應為原圖可能是壓縮過的。并且要注意的是當這張圖片已經壓縮到最差了那就不能夠再壓縮了,具體是通過什么來評定圖片的質量是最差的,這個得問專業(yè)人士了...

經過我的實驗證明,我現(xiàn)在下載了一張原圖,然后原圖的質量系數(shù)為1的時候寫成文件然后再次讀取此圖片,此新圖片的質量系數(shù)為1的時候的data大小仍然要比新圖大,所以每一張圖片的最好質量并不是自己。所以如果我們需要將圖片寫成文件的話那么就不要返回UIImage了,而是應該返回NSData,當然可以寫兩個方法:

+ (UIImage *)scaleImage:(UIImage *)image toLength:(NSInteger)maxLength{
    CGFloat compression = 1;
    maxLength *= 1024;
    NSData *data = UIImageJPEGRepresentation(image, compression);
    while (data.length > maxLength && compression > 0) {
        compression -= 0.02;
        data = UIImageJPEGRepresentation(image, compression);
    }
    UIImage *resultImage = [UIImage imageWithData:data];
    return resultImage;
}

這個是之前的方法直接返回的是一個UIImage,如果是我們需要把這個經過壓縮的UIImage寫成文件的話,那么又需要通過UIImageJPEGRepresentation這個函數(shù)去轉,這個函數(shù)是需要質量系數(shù)你不知道多少,所以你得把質量系數(shù)傳出來這樣很麻煩,所以我覺得可以把NSData傳出來,然后再在外面轉成UIImage或者說寫兩個方法,返回的類型一個為UIImage,另一個為NSData.

希望這個對大家有幫助?。?!

七禾.jpg
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容