1. Wprowadzenie
Obrazy stanowią średnio ponad 60% bajtów potrzebnych do wczytania strony internetowej. Dzięki formatowi AVIF możesz zmniejszyć rozmiar obrazów i przyspieszyć wczytywanie witryny.
Co to jest AVIF?
AVIF to format pliku graficznego pochodzący z bitstreamu wideo AV1. Format AVIF został opracowany z myślą o wydajnej kompresji.
Dlaczego AVIF?
Obrazy w formacie AVIF są znacznie mniejsze niż obrazy w formatach JPEG, PNG, GIF lub WebP, a ich jakość jest taka sama lub lepsza.
Czego się nauczysz
- Jak tworzyć obrazy AVIF na podstawie swoich obrazów
- Jak renderować obrazy AVIF na stronie internetowej
Czego potrzebujesz
- Dowolna główna przeglądarka.
- Edytor tekstu
- cmake
- git
- ninja
- Obraz. Jeden z nich znajdziesz pod tym linkiem.
- FFmpeg
2. Tworzenie obrazów AVIF za pomocą Squoosh
Squoosh to aplikacja internetowa do kompresji obrazów, która może konwertować obrazy do formatu AVIF.
- Otwórz Squoosh.
- Przeciągnij obraz lokalny do Squoosh.

- W menu Kompresuj wybierz AVIF.

Squoosh skompresuje obraz do formatu AVIF. Gdy Squoosh skończy, w prawym dolnym rogu pojawi się przycisk pobierania z informacjami statystycznymi o obrazie AVIF.

Oryginalny obraz przykładowy miał rozmiar 3340 kB, a skompresowany – 378 kB. Obraz przykładowy został skompresowany prawie 10 razy bardziej niż obraz oryginalny.
- Pobierz obraz AVIF.
Kliknij przycisk pobierania, a obraz AVIF zostanie zapisany na dysku lokalnym.
Masz już swój własny obraz AVIF.
3. Tworzenie kodera wiersza poleceń avifenc
avifenc to aplikacja wiersza poleceń, która może konwertować obrazy PNG i JPEG na obrazy AVIF. avifenc używa biblioteki libavif, która może dekodować i kodować obrazy AVIF. Jeśli masz dużo obrazów, które chcesz przekonwertować na format AVIF, dobrym rozwiązaniem będzie użycie kodera wiersza poleceń avifenc.
- Pobierz kod.
git clone https://github.com/AOMediaCodec/libavif.git
- Zmień katalog na libavif.
cd libavif/
Istnieje wiele sposobów konfigurowania avifenc i libavif do kompilacji. Więcej informacji znajdziesz na stronie libavif. Utworzymy avifenc tak, aby był statycznie połączony z koderem libaom, dekoderem dav1d i bibliotekami przetwarzania libyuv.
- Utwórz narzędzie do kodowania wiersza poleceń avifenc.
Warto utworzyć katalog kompilacji dla avifenc.
mkdir build
Przejdź do katalogu kompilacji.
cd build
Utwórz pliki kompilacji dla avifenc.
cmake -DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL -DAVIF_LIBYUV=LOCAL -DBUILD_SHARED_LIBS=OFF -DAVIF_BUILD_APPS=ON ../
Utwórz avifenc.
make
avifenc został utworzony.
4. Tworzenie obrazów AVIF za pomocą avifenc
- Utwórz obraz AVIF z ustawieniami domyślnymi.
Najbardziej podstawowe parametry, które trzeba ustawić, aby uruchomić avifenc, to pliki wejściowe i wyjściowe.
./avifenc happy_dog.jpg example.avif
Masz już swój drugi obraz AVIF.
- Zmiana jakości kodowania AVIF.
Zwykle jedynym parametrem, który możesz chcieć zmienić w kodowaniu AVIF, jest parametr quality. quality to parametr, który określa jakość skompresowanego obrazu w zależności od rozmiaru pliku. Na przykład plik o wysokiej jakości (-q 90) będzie znacznie większy niż plik o niskiej jakości (-q 20), ale będzie wyglądał znacznie lepiej.
5. Renderowanie obrazów AVIF na stronie internetowej
Teraz pokażemy światu Twoją ciężką pracę.
- Utwórz stronę internetową, na której będzie wyświetlany obraz AVIF.
Utwórz plik o nazwie avif_example.html.
Otwórz avif_example.html w edytorze tekstu i wpisz ten kod:
<html>
<head>
<title>AVIF Example</title>
</head>
<body>
<picture>
<source type="image/avif" srcset="example.avif">
<img src="happy_dog.jpg">
</picture>
</body>
</html>
Skopiuj plik źródłowy (w moim przypadku happy_dog.jpg) i plik AVIF (example.avif) do tego samego katalogu co avif_example.html.
Używamy elementu picture, aby renderować obraz AVIF, jeśli przeglądarka obsługuje ten format, a jeśli nie, to obraz JPEG. Więcej informacji o elem1encie picture.
- Otwórz stronę internetową w Chrome.
Jednym ze sposobów otwarcia pliku HTML jest przeciągnięcie avif_example.html do Chrome. Innym sposobem otwarcia pliku HTML jest udostępnienie avif_example.html z serwera HTTP.
Obraz AVIF powinien być teraz renderowany w Chrome. Możesz to sprawdzić, klikając obraz prawym przyciskiem myszy i wybierając opcję Save image as.... Powinno się otworzyć okno z plikiem example.avif. Innym sposobem jest otwarcie Narzędzi deweloperskich w Chrome i sprawdzenie, czy plik example.avif został pobrany.
6. Tworzenie animowanych obrazów AVIF za pomocą FFmpeg
- Utwórz animowany obraz AVIF.
Uruchom to polecenie, aby utworzyć animowany obraz AVIF z pliku y4m.
ffmpeg -i ice_qcif_15fps.y4m animated.avif
Masz już swój własny animowany obraz AVIF.
- Renderuj animowany obraz AVIF na stronie internetowej.
Utwórz plik o nazwie avif_animated_example.html.
Otwórz avif_animated_example.html w edytorze tekstu i wpisz ten kod:
<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>
Skopiuj plik źródłowy (w powyższym przypadku ice_qcif_15fps.gif) i plik AVIF (animated.avif) do tego samego katalogu co avif_animated_example.html.
- Otwórz stronę internetową w Chrome.
Jednym ze sposobów otwarcia pliku HTML jest przeciągnięcie avif_animated_example.html do Chrome. Innym sposobem otwarcia pliku HTML jest udostępnienie avif_animated_example.html z serwera HTTP.
Animowany obraz AVIF powinien być teraz renderowany w Chrome.
Jeśli używasz podanych przykładowych multimediów, powinny one wyglądać mniej więcej tak:

Możesz sprawdzić, czy jest to animowany obraz AVIF, klikając go prawym przyciskiem myszy i wybierając opcję Save image as.... Powinno się otworzyć okno z plikiem animated.avif. Innym sposobem jest otwarcie Narzędzi deweloperskich w Chrome i sprawdzenie, czy plik animated.avif został pobrany.
7. Tworzenie animowanych obrazów AVIF za pomocą avifenc
- Skonwertuj źródłowe multimedia na format y4m.
avifenc obsługuje format y4m jako dane wejściowe do tworzenia animowanych obrazów AVIF. Świetnym sposobem na tworzenie plików y4m jest użycie FFmpeg.
ffmpeg -i input.gif -pix_fmt yuvj444p -f yuv4mpegpipe output.y4m
- Utwórz animowany obraz AVIF.
Uruchom to polecenie, aby utworzyć animowany obraz AVIF z pliku y4m.
./avifenc ice_qcif_15fps.y4m animated.avif
Masz już swój drugi animowany obraz AVIF.
- Renderuj animowany obraz AVIF na stronie internetowej.
Utwórz plik o nazwie avif_animated_example.html.
Otwórz avif_animated_example.html w edytorze tekstu i wpisz ten kod:
<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>
Skopiuj plik źródłowy (w powyższym przypadku ice_qcif_15fps.gif) i plik AVIF (animated.avif) do tego samego katalogu co avif_animated_example.html.
- Otwórz stronę internetową w Chrome.
Jednym ze sposobów otwarcia pliku HTML jest przeciągnięcie avif_animated_example.html do Chrome. Innym sposobem otwarcia pliku HTML jest udostępnienie avif_animated_example.html z serwera HTTP.
Animowany obraz AVIF powinien być teraz renderowany w Chrome.
Jeśli używasz podanych przykładowych multimediów, powinny one wyglądać tak:

Możesz sprawdzić, czy jest to animowany obraz AVIF, klikając go prawym przyciskiem myszy i wybierając opcję Save image as.... Powinno się otworzyć okno z plikiem animated.avif. Innym sposobem jest otwarcie Narzędzi deweloperskich w Chrome i sprawdzenie, czy plik animated.avif został pobrany.
- Zmiana jakości kodowania AVIF.
Plik ice_qcif_15fps.gif jest około 7 razy większy i ma znacznie gorszą jakość. Możesz zmienić jakość AVIF, aby mniej więcej odpowiadała jakości ice_qcif_15fps.gif, zmieniając parametr jakości na 20.
./avifenc -q 20 ice_qcif_15fps.y4m animated.avif
Teraz animowany plik AVIF i ice_qcif_15fps.gif mają podobną jakość, ale plik GIF jest około 22 razy większy.
8. Gratulacje!
Ukończono ćwiczenie z kodowania dotyczące wyświetlania obrazów AVIF.
Mamy nadzieję, że wiesz już, jak format AVIF może pomóc zmniejszyć rozmiar obrazów i zwiększyć wydajność ich przesyłania w internecie. Więcej informacji o funkcjach AVIF znajdziesz w świetnym poście Jake'a Archibalda.