圖片優(yōu)化的最佳實(shí)踐

如今行業(yè)內(nèi)的圖片格式越來越豐富,優(yōu)化、壓縮的方法也越來越多。我們該如何選擇適合自己項(xiàng)目的圖片優(yōu)化方法呢?讓我們來一起探討圖片優(yōu)化的最佳實(shí)踐吧。

我選擇了幾種常用的圖片格式和優(yōu)化方法來做實(shí)驗(yàn),我會(huì)分別從【矢量圖】和【位圖】來進(jìn)行分析。

一、矢量圖 -- iconfont

什么是iconfont?
從字面意思理解就是“圖標(biāo)字體”。

iconfont

為什么用iconfont?
1. 自由變換大小和顏色等樣式
2. 畫質(zhì)清晰
3. 易于維護(hù)
4. 兼容性好
css能為字體加的樣式對(duì)于圖標(biāo)字體都可適用。

如何使用iconfont?
這里我濃縮成了3步:

1. 在網(wǎng)上選擇一款你喜歡的圖標(biāo)字體生產(chǎn)工具,將svg圖片提交上去;

第一步

2. 下載包含字體文件、樣式文件、Demo的文件包;

第二步

3. 使用代碼,利用demo中的代碼修改成適合你用的。

第三步

二、矢量圖 -- svg

什么是iconfont?
谷歌和度娘上都有一大段專業(yè)的文字來描述,我的簡單理解就是一種二維矢量圖片格式。

為什么用svg?
使用方便
任意縮放
文件體積小

如何使用svg?
我分為2步:

1.導(dǎo)出 -- 用任何一款可以畫矢量圖的軟件都可以導(dǎo)出svg格式圖片,如:Adobe Illustrator/Sketch

Sketch


AI

這里可以注意的是,圖形勾勒過程中可以去掉多余的錨點(diǎn),錨點(diǎn)越少文件越小。

2. 應(yīng)用 -- 導(dǎo)出的圖片應(yīng)用在網(wǎng)頁中就像通常用jpg/png格式的圖片一樣引入相應(yīng)的圖片路徑就行。

svg應(yīng)用

svg既然有這么多優(yōu)點(diǎn),又方便使用,我們來看看效果如何呢?下面分別用svg圖和png圖做一個(gè)簡單的對(duì)比:

效果對(duì)比

我們發(fā)現(xiàn)在質(zhì)量幾乎相同的情況下svg圖片體積小很多,但別忘了svg是矢量圖形,其實(shí)質(zhì)量會(huì)比位圖png好很多。如此美妙的圖片格式我們還有什么理由拒絕使用它。

查理·芒格說:只有了解一個(gè)知識(shí)的局限性,才能真正擁有一個(gè)知識(shí)。

接下來我們看看svg的兼容性:

svg兼容性

兼容性看似前景一片大好,但還是有些低版本瀏覽器無法支持。沒關(guān)系,我們先把問題暫時(shí)放一放。后面再來聊一聊兼容性的解決方案。

三、 位圖

關(guān)于位圖我通過一系列實(shí)驗(yàn),得出了兩條結(jié)論:
- 圖片顏色越豐富webp的壓縮效果越好
- 顏色單一的圖片壓縮模式png優(yōu)于webp優(yōu)于jpg

為了方便理解我畫了個(gè)簡單的圖表來描述png、jpg、webp與文件大小、圖片顏色豐富程度的關(guān)系。

我是如何得出這個(gè)結(jié)論的呢?我在幾百張圖片實(shí)驗(yàn)中挑選了三組典型的案例來展示:

這組圖片說明了圖片顏色越單一png格式的壓縮效果越好。

數(shù)據(jù)對(duì)比1


這組圖片雖然看上去貌似顏色單一,但它標(biāo)題的陰影所用的灰色通道占據(jù)了大量的顏色數(shù),所以可以看出其webp的表現(xiàn)較優(yōu)越。

數(shù)據(jù)對(duì)比2


這張顏色相對(duì)豐富的圖片就更加能說明webp對(duì)于顏色數(shù)多的圖片優(yōu)異的表現(xiàn)能力了。

數(shù)據(jù)對(duì)比3

四、位圖 -- webp

說了這么多webp到底是什么呢?
谷歌作為其開發(fā)商用了一大段文字來描述,我簡單的理解webp就是一種壓縮效果更好的圖片格式。

為什么用webp?
體積更小
顏色豐富

如何使用webp?
關(guān)于如何使用webp我在線上找了一些轉(zhuǎn)換壓縮工具和軟件,使用后發(fā)現(xiàn)這些工具的參數(shù)、穩(wěn)定性都不太一樣,就導(dǎo)致導(dǎo)出的圖片效果也不太一樣,非常影響我實(shí)驗(yàn)的最終效果。對(duì)比各種方案后還是選擇工程化的方式比較靠譜。

五、gulp插件自動(dòng)壓縮

為什么選擇工程化?
自動(dòng)化 — 節(jié)約人力
標(biāo)準(zhǔn)化 — 避免出錯(cuò)

如何使用?
這里我選擇了以下幾種gulp插件供大家參考:

gulp插件

gulp插件的用法:

imagemin


webp

從上面的截圖可以看出imagemin和webp插件除了可配置需要壓縮的圖片格式外,還可以自行配置壓縮的質(zhì)量。我想重點(diǎn)說明一下壓縮質(zhì)量可以根據(jù)自己的項(xiàng)目需要來配置參數(shù),截圖中是我根據(jù)實(shí)驗(yàn)中的圖片總體輸出質(zhì)量和體積不斷測試出的一個(gè)相對(duì)較合適的參數(shù)。

我分別做了三個(gè)方案的測試,測試對(duì)象是一個(gè)有124個(gè)圖片文件的文件夾,結(jié)論如下:

從統(tǒng)計(jì)結(jié)果來看方案2(將大部分圖片壓縮轉(zhuǎn)換成webp格式)的效果是壓縮率最高的,雖然耗時(shí)相對(duì)較長,但比起人工手動(dòng)在線壓縮優(yōu)勢會(huì)大很多。

以下是方案2的實(shí)驗(yàn)截圖:

實(shí)驗(yàn)截圖

實(shí)驗(yàn)得出的結(jié)論是從整體來看webp的壓縮格式相比png和jpg都相對(duì)較優(yōu)。

webp既然如此好用,我們來看看兼容性。

webp兼容性

這樣看來我們接下來要考慮兼容圖片格式相關(guān)工作了。

六、按需加載

關(guān)于兼容瀏覽器不支持webp的方案我簡單的為大家介紹3種:

1. h5標(biāo)簽

這個(gè)方案最簡單,利用<picture><source>標(biāo)簽,具體實(shí)現(xiàn)方式如下截圖:

當(dāng)瀏覽器支持source標(biāo)簽srcset屬性里的圖片時(shí)會(huì)顯示此圖片,如果不支持則會(huì)向下兼容img標(biāo)簽里的圖片,所以img標(biāo)簽里通常放入是瀏覽器都支持的普通圖片格式。

但貌似兼容性并不是那么理想android又不支持新h5標(biāo)簽,欲哭無淚有木有?我還是決定再測試一下。

網(wǎng)上有資料說source標(biāo)簽也可以用src屬性,于是我做了幾組測試,測試結(jié)果如下圖:

能展示微證券banner圖的是android系統(tǒng),能看到小黃人說明瀏覽器不支持webp圖片格式,那第二張圖是怎么回事?

我們通過下面這個(gè)表格來分析一下關(guān)于source標(biāo)簽里srcset這個(gè)屬性。

通過測試得出以上表格結(jié)論,說明source標(biāo)簽是不支持“src”屬性的。但是如果srcset里的路徑圖片是webp格式的話蘋果相關(guān)的產(chǎn)品都是不支持,而且還不向下兼容,不顯示任何圖片。以此判斷如果srcset里是webp格式,由于瀏覽器本身是支持srcset的所以當(dāng)它遇見的是不支持的webp格式就沒有再向下兼容。
于是我將srcset改為src,瀏覽器不支持src的屬性,直接就向下兼容了。所以測試圖片中的第二張圖片下面展示的小黃人是因?yàn)閟ource標(biāo)簽內(nèi)用src屬性,瀏覽器支持向下兼容了png格式的小黃人圖片。

2. JS兼容方案

此段代碼先判斷瀏覽器是否支持webp圖片格式,原理是先加載一張webp圖片格式。如果瀏覽器能加載到圖片的寬高說明是支持的,反之則不支持。

接下來就可以利用這段代碼設(shè)置函數(shù)用來判斷支持或不支持webp格式時(shí)的操作。

在html中設(shè)置參數(shù)分別用來插入支持或不支持webp格式時(shí)的圖片路徑。

3. 服務(wù)器端兼容方案

利用服務(wù)器端請求瀏覽器端的accept 頭,支持webp圖片格式的就返回webp格式的文件。這些配置可以用nodejs實(shí)現(xiàn),也可以在nginx中完成。

七、動(dòng)圖--apng

既然我們有很多方案可以向下兼容圖片,再介紹一個(gè)好用的動(dòng)圖格式——apng。

什么是apng?
簡單說就是一種png擴(kuò)展的動(dòng)態(tài)圖片格式(Animated png)。

為什么用apng?
支持24位彩色圖像,表現(xiàn)更多動(dòng)態(tài)圖片細(xì)節(jié)
支持8位透明通道,背景完全透明

怎么用?
為大家介紹一種在線生成的工具,可以把每一幀圖片倒入利用它生成apng格式的動(dòng)圖

https://ezgif.com/apng-maker

效果對(duì)比
我在網(wǎng)上找到一張圖非常能說明gif、png、apng三者的關(guān)系。大家一看便知了。

apng兼容性

雖然兼容性看上去不是特別理想,但是apng自己會(huì)向下兼容,若是在不支持的瀏覽器上apng會(huì)只顯示第一幀,那么圖片看上去會(huì)像png圖。

不支持apng時(shí):

支持apng時(shí):

八、最佳實(shí)踐總結(jié)

綜上所述那么多圖片優(yōu)化的格式和方法,我將它們和相應(yīng)的情況做了個(gè)小結(jié):

隨著技術(shù)的進(jìn)步會(huì)有越來越多的技術(shù)和方法來完善圖片優(yōu)化的工作,面對(duì)技術(shù)的進(jìn)步,我們應(yīng)該用辯證的方法看待問題。遇到困難敢于開拓,勇于實(shí)踐,通過不斷地探索和驗(yàn)證使我們更加接近真理。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 移動(dòng)端圖片格式調(diào)研 圖片通常是移動(dòng)端流量耗費(fèi)最多的部分,并且占據(jù)著重要的視覺空間。合理的圖片格式選用和優(yōu)化可以為你...
    AngeloD閱讀 1,313評(píng)論 0 5
  • 注明:本人原創(chuàng)翻譯,原版為Essential Image Optimization電子書,這里將其拆分為幾篇文章發(fā)...
    ProteanBear閱讀 5,438評(píng)論 0 5
  • 本文會(huì)不定期更新,推薦watch下項(xiàng)目。如果喜歡請star,如果覺得有紕漏請?zhí)峤籭ssue,如果你有更好的點(diǎn)子可以...
    天之界線2010閱讀 18,841評(píng)論 19 153
  • 圖片通常是移動(dòng)端流量耗費(fèi)最多的部分,并且占據(jù)著重要的視覺空間。合理的圖片格式選用和優(yōu)化可以為你節(jié)省帶寬、提升視覺效...
    傻傻小蘿卜閱讀 865評(píng)論 1 9
  • 前言 在互聯(lián)網(wǎng)快速發(fā)展,熱火朝天的當(dāng)下,無論是PC端,還是移動(dòng)端,圖片都是必不可少的元素。好的圖片能讓我們的應(yīng)用熠...
    無神閱讀 588評(píng)論 0 0

友情鏈接更多精彩內(nèi)容