Как включить поддержку AVIF для сервера

Формат изображения AVIF выглядит действительно многообещающим. Как вы можете скомпилировать и использовать его на веб-сервере? Моя, в частности, Ubuntu 18.04/Nginx, но я ищу суть того, как скомпилировать и начать конвертировать изображения?

2 ответа

AVIF кажется новым форматом, и здесь не так много информации. Но давайте сразу перейдем к находкам, которые там были:

В [1] я нашел поваренную книгу, как обслуживать их на Nginx:

http {
    # ... Omitted.
    map $http_accept $ai {
        "~avif" "a";
        "~webp" "w";
        default "";
    }
    types {
        image/avif avif;
    }
    server {
        # ... Omitted.
        # Rewrite .i files.
        location ~ \.i$ {
            # Change .i request to .avif file.
            if ($ai = "a") {
                rewrite ^(.*)$ $1.avif last;
            }
            # Change .i to .webp file.
            if ($ai = "w") {
                rewrite ^(.*)$ $1.webp last;
            }
            # If no AVIF support, use PNG image.
            if ($ai = "") {
                rewrite ^(.*)$ $1.png last;
            }
        }
    }
}

Решение полагается на заголовок Accept и оператор карты. Предполагается, что изображения здесь оканчиваются на.i, но это также будет работать с.png и другими, если так изменить.

Запросы к серверу должны иметь тип "image/avif".

Существует сервис Squoosh, с помощью которого вы можете конвертировать свои изображения. Некоторые программные подходы также упоминаются в [2], которые основаны на Sharp.

Код о преобразовании:

import * as sharp from 'sharp';

sharp('input.png')
 .toFormat('heif', { quality: 30, compression: 'av1' })
 .toFile('output.avif')
 .then(info => console.log(info));

Источники:

[1] https://www.dotnetperls.com/nginx-examples

[2] https://dev.to/adamlacombe/how-to-convert-images-to-avif-in-nodejs-5083

Поскольку формат настолько новый, большинство инструментов для работы с изображениями, таких как ImageMagick, еще не поддерживают его в стабильных версиях. К счастью, мы создали онлайн-сервис, который конвертирует ваши изображения в формат AVIF.

Он работает, отправляя HTTP-запрос GET:

${AVIF_SERVICE_URL}?url=${PUBLIC_IMAGE_SOURCE_URL}&format=avif&width=${WIDTH_IN_PIXELS}

Больше информации

Другие вопросы по тегам