图片压缩之 PNG
鏈接:https://zhuanlan.zhihu.com/p/19570424
來源:知乎
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。
PNG(Portable Network Graphics) 是一種大家經常使用的位圖格式。
PNG 的特點
- 位圖
- 支持半透明 (BMP不支持,JPEG不支持,GIF不支持,TIFF支持)
- 支持無損壓縮 (BMP不支持,JPEG支持,GIF不支持,TIFF支持)
- 不支持動畫 (A-PNG沒有得到廣泛應用,GIF是事實標準)
- 不支持有損壓縮, 確切地說,是沒有可調整的質量設置。(JPEG支持,WebP支持)
PNG 的用途
- 有透明度的圖標
- 有透明度的界面元素,如按鈕,背景
- 對圖片尺寸不敏感的一般用途
PNG 的壓縮
PNG-8 壓縮
雖然 PNG 的自帶無損壓縮使它比 BMP 和 TIFF 已經「聰明」了很多,但對于網(wǎng)絡傳播仍然嫌大。PNG-8 是唯一可行的壓縮方法。
大家可能立即想到的就是 Photoshop 自帶的 PNG-8 壓縮。
它的原理是縮減圖片的色彩空間,8位就是2的8次方種顏色,也就是256色(或更少)。對于一般的按鈕和界面圖標,可能只有幾種顏色;但對于照片來說,256色肯定完全不夠用。為了能顯示過渡色,有兩種辦法來欺騙眼睛。一種是 Diffusion, 有一點像點彩畫的做法,用兩種相近顏色的來拼湊。它的參數(shù)是 Dither,Dither參數(shù)越大,混合得越均勻,但文件也會變大。
另外一種就是用圖案,看上去不太自然,現(xiàn)在很少用。
Photoshop 自帶的 PNG-8 壓縮有嚴重的缺點,就是它的透明只能全透明,不能半透明。雖然這樣的格式支持廣泛,包括 IE 6 都支持。但也大大限制了 PNG 的使用范圍。
透明PNG的壓縮
如果不考慮 IE6 的話,又希望在保留透明度同時壓縮大小,那么好消息是還可以用第三方工具,在 Mac 上有 ImageAlpha ,網(wǎng)頁上有 TinyPNG 。它的原理是讓 PNG-8 的 256 色中包含透明色。可以用的壓縮工具:
- http://www.libpng.org/pub/png/apps/pngquant.html 原始的 pngquant
- http://pngnq.sourceforge.net
- pngquant — lossy PNG compressor 升級版的 pngquant
- PNGOUT
- http://optipng.sourceforge.net
- http://pmt.sourceforge.net/pngcrush/
壓縮參數(shù)
這些庫都有很多參數(shù)可以調節(jié)。有興趣的同學可以去親自嘗試一下。我知道你們還是想看現(xiàn)成的結果。
原大 94KB, 無壓縮 12KB, pngQuant 壓縮后 5KB 幾乎無變化, WebP壓縮后 3KB 有明顯瑕疵。
首先,用 ImageMagick 把圖標改小:這里附加了一點銳化和高級的重采樣算法,可以保證圖片壓小了之后清晰。用默認的算法有時圖片會糊,但這樣會稍微增加計算量。
convert ${input} -resize 68x -unsharp 0x1+0.3 -filter Lanczos ${out}然后,用 pngquant 把PNG壓縮:
pngquant -f --speed 1 --ext opt.png ${input}如果嫌壓縮的機器太閑,最后還可以用PNGOut壓縮掉10%左右:
pngout -ks -f6 ${input}要用 WebP 嗎?
WebP 是谷人希 (谷歌!人類的希望!) 推行的自造輪子,它的特點是,支持半透明的有損壓縮,像是 PNG 和 JPEG 的雜交品種。技術小白鼠看到 Spec 容易流口水,也容易嘗試使用,因為它號稱可以比 png 小 45%,比 JPEG 小 30% 什么的。
WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index.但我不建議大規(guī)模使用,原因無非:
- 支持差。Chrome 當然能用,但包括 Photoshop 在內的大多數(shù)程序打不開。
- 壓得慢。親測。人家可能用了高級算法,但對于服務器來說,這點很蛋疼。
- 邏輯復雜。和理想不同,為了萬無一失,你需要兩套圖片。一套 WebP,一套普通的 PNG 或者 JPEG。這就要壓兩次,還要存兩次,還要加判斷的邏輯。
- 先把手頭的 PNG 和 JPEG 壓好再說吧!
不就是為了讓圖小一點嗎,你已經試了所有的辦法了嗎?壓縮參數(shù)都優(yōu)化過了嗎?你用 WebP 默認的參數(shù)去壓,也不會比別人優(yōu)化過的 PNG 和 JPEG 參數(shù)效果好、文件小的。把參數(shù)吃透,壓到極限,你還覺得文件太大?
其實除了 WebP,還有類似 JPEG 2000 之類的輪子從來就沒有推開,我悲觀的認為,現(xiàn)有的格式已經足夠好,新格式都沒有極其顯著的優(yōu)越性,而大家的網(wǎng)速還在提升,帶寬成本在下降。于是它們只能算生不逢時吧。
轉載于:https://www.cnblogs.com/hubl/p/5748685.html
總結
- 上一篇: AD服务器不愿意处理该请求
- 下一篇: FunDA(7)- Reactive S