1. 簡介
平均而言,圖片載入網頁所需的位元組容量超過 60%。使用 AVIF 可縮小圖片並提高網站載入速度。
什麼是 AVIF?
AVIF 是衍生自 AV1 影片位元的一種新圖片格式。AVIF 是基於壓縮效率而設計,
為何要啟用 AVIF?
AVIF 圖片遠小於相同或更佳的 JPEG、PNG、GIF 或 WebP 圖片。
學習目標
- 如何利用圖片製作 AVIF 圖片
- 如何顯示網頁上的 AVIF 圖片
軟硬體需求
2. 使用 Squoosh 建立 AVIF 圖片
Squoosh 是圖片壓縮網頁應用程式。透過仲裁,您可以輕鬆將圖片壓縮為 AVIF 圖片。
- 開啟 https://squoosh.app
- 將本機圖片拖曳到 Squoosh 上。
- 從 [壓縮] 下拉式方塊中選擇 [AVIF]。
接著,Squoosh 將圖片壓縮為 AVIF 圖片。Squoosh 完成後,右下角會顯示 AVIF 圖片的下載按鈕,以及一些統計資料。
原始範例圖片為 3340 KB,壓縮後的圖片為 378 KB。這個範例圖片經過壓縮後,比原始圖片小 10 倍!
- 下載 AVIF 圖片
按一下下載按鈕,AVIF 圖片就會儲存至您的本機磁碟。
您現在可以取得自己的 AVIF 圖片!
3. 建立指令列編碼器 avifenc
avifenc 是一款可將 PNG 和 JPEG 圖片轉換為 AVIF 圖片的指令列應用程式。avifenc 會使用 libavif,這個程式庫可解碼及編碼 AVIF 圖片。如果您想將大量圖片轉換為 AVIF,建議您使用指令列編碼器 avifenc。
- 取得程式碼。
git clone https://github.com/AOMediaCodec/libavif.git
- 將目錄變更為 libavif。
cd libavif/
您可以透過許多不同的方式設定 avifenc 和 libavif 來建構內容。詳情請參閱 libavif。我們會建構 avifenc,使其以靜態方式連結至 av1 編碼器和解碼器程式庫 libaom。
- 取得並建構程式庫。
切換至 libavif 擴充功能目錄。
cd ext
下一個指令將提取 libaom 原始碼,並透過靜態方式建構 libaom。
./aom.cmd
將目錄變更為 libavif。
cd ../
- 建構命令列編碼工具 avifenc。
建議您為航空建立建構目錄。
mkdir build
變更為建構目錄。
cd build
建立航空的建構檔案。
cmake -DCMAKE_BUILD_TYPE=Release -DAVIF_LOCAL_AOM=1 -DAVIF_CODEC_AOM=1 -DBUILD_SHARED_LIBS=0 -DAVIF_BUILD_APPS=1 ../
建立航空。
make
您已成功建立航空資源!
4. 建立具有功用的 AVIF 圖片
- 使用預設設定建立 AVIF 圖片。
最常執行的素材資源參數,是設定輸入和輸出檔案。
./avifenc happy_dog.jpg example.avif --min 0 --max 63 -a end-usage=q -a cq-level=32 -a tune=ssim -a deltaq-mode=3 -a sharpness=3 -y 420
Avifenc 有多種選項會影響品質和速度。如要查看選項並進一步瞭解選項,請執行 ./avifenc
您現在有專屬的第二張 AVIF 圖片!
- 加快編碼器的運作速度。
視機器上的核心數量而定,其中一項實用的參數可能是 --jobs
參數。這個參數可設定要使用多少執行緒建立 AVIF 圖片。請嘗試執行這個指令列。
./avifenc happy_dog.jpg example.avif --jobs 8
這指示使用者在建立 AVIF 圖片時,使用 8 個執行緒。我的電腦可將 AVIF 編碼速度提升為 5 倍。
5. 在網頁上轉譯 AVIF 圖片。
現在,讓我們向全世界展現你努力的成果。
- 建立提供 AVIF 圖片的網頁。
建立名為 avif_example.html
的檔案。
在文字編輯器中開啟 avif_example.html
,然後輸入以下程式碼:
<html>
<head>
<title>AVIF Example</title>
</head>
<body>
<picture>
<source type="image/avif" srcset="example.avif" />
<img src="happy_dog.jpg" />
</picture>
</body>
</html>
將來源檔案 (在此案例中為 happy_dog.jpg
) 和 AVIF 檔案 (eaxmple.avif
) 複製到與 avif_example.html
相同的目錄中。
如果瀏覽器支援 AVIF,我們會使用 元素算繪 AVIF 圖片,而如果瀏覽器不支援,則會改用 JPEG 格式的備用素材資源。如要進一步瞭解
,請參閱本文。
- 在 Chrome 中開啟網頁。
開啟 HTML 檔案的方法之一,就是將 avif_example.html
拖曳到 Chrome 中。另一個開啟 HTML 檔案的方式,是透過 HTTP 伺服器提供 avif_example.html
。
現在,AVIF 圖片應該會在 Chrome 中順利顯示。如要進行測試,請在圖片上按一下滑鼠右鍵,然後選擇「Save image as...
」,畫面上應會開啟含有 example.avif
的對話方塊。另一種方式是開啟 Chrome 開發人員工具,並查看已下載 example.avif
。
6. 製作動畫 AVIF 圖片
- 將來源媒體轉換成 y4m 格式。
avifenc
支援 y4m 做為建立 AVIF 圖片動畫的輸入內容。如要建立 y4m 檔案,建議您使用 FFmpeg。
ffmpeg -i input.gif -pix_fmt yuv420p -f yuv4mpegpipe output.y4m
- 製作動畫 AVIF 圖片。
執行下列指令,從 y4m 檔案建立 AVIF 動畫圖片。
avifenc ice_qcif_15fps.y4m animated.avif
您現可擁有自己的動畫 AVIF 圖片!
- 在網頁中轉譯動畫 AVIF 圖片。
建立名為 avif_animated_example.html
的檔案。
在文字編輯器中開啟 avif_animated_example.html
,然後輸入以下程式碼:
<html>
<head>
<title>Animated AVIF Example</title>
</head>
<body>
<picture>
<source type="image/avif" srcset="animated.avif" />
<img src="ice_qcif_15fps.gif" />
</picture>
</body>
</html>
將來源檔案 (如上述 ice_qcif_15fps.gif
中) 和 AVIF 檔案 (animated.avif
) 複製到與 avif_animated_example.html
相同的目錄中。
- 在 Chrome 中開啟網頁。
開啟 HTML 檔案的方法之一,就是將 avif_animated_example.html
拖曳到 Chrome 中。另一個開啟 HTML 檔案的方式,是透過 HTTP 伺服器提供 avif_animated_example.html
。
現在,您的動畫 AVIF 圖片應該會顯示在 Chrome 中。
如果使用所提供的範例媒體,看起來會像這樣:
如要測試這張動畫 AVIF 圖片,請在圖片上按一下滑鼠右鍵,然後選擇「Save image as...
」,畫面上應會開啟含有 animated.avif
的對話方塊。另一種方式是開啟 Chrome 開發人員工具,並查看已下載 animated.avif
。
7. 恭喜!
您已完成提供 AVIF 圖片程式碼研究室!
希望您已清楚瞭解 AVIF 如何協助您縮小圖片,並且提高圖片在網路上的傳輸效率。如要進一步瞭解 AVIF 的功能,請參閱 Jake Archibald 撰寫的這篇文章。