UIImageJPEGRepresentation 與 UIImagePNGRepresentation
UIImageJPEGRepresentation 與 UIImagePNGRepresentation
問題:
- 最近在項目中用到了圖片壓縮后上傳到服務器, 並還需要從服務器下載該圖片.
- 在壓縮的時候, 先根據當前屏幕寬高比做了一個尺寸縮放
- 然后使用 UIImageJPEGRepresentation 壓縮到100KB以下並上傳到服務器.
- 下載的時候使用 SD 的downloadImageWithURL 方法, 並用 UIImagePNGRepresentation 轉成 NSData 並使用 NSFileManager 寫入到沙盒.
- 然后在另一個功能中又需要讀取該圖片, 並判斷其大小. 發現實際占用的硬盤空間與服務器上存儲的圖片大小有很大的差別.
原因
- UIImageJPEGRepresentation 中的壓縮比例並不精確, 0.9才比較接近原圖.
- UIImageJPEGRepresentation 和 UIImagePNGRepresentation 由於其壓縮算法並不一樣(基於 JPEG 和 PNG 兩種圖片的原理, 具體可以參考這里), 所以如果對同一張圖片(尤其如果原圖是 png 格式)既使用 UIImagePNGRepresentation 又 UIImageJPEGRepresentation 交叉從 UIImage 轉換成 NSData, 那么其所占的硬盤空間前后會發生一個很大的變化.