Как конвертировать GIF в Base64
- Перетащите файл
.gifв поле или выберите его через диалог. - Если GIF анимированный, не трогайте Макс. ширина, Конвертировать в и Удалить метаданные (EXIF).
- Выберите Формат вывода: Data URI, CSS background-image, HTML
<img>, Markdown или чистый Base64. - Нажмите Скопировать результат. Счётчик показывает, насколько текст больше файла.
В превью анимация проигрывается, так что перед копированием можно убедиться, что файл тот самый.
Анимация и параметры перекодирования
Параметры над результатом перерисовывают изображение на canvas. Canvas хранит одну статичную картинку, а записывать из него GIF браузеры не умеют, поэтому перекодированный GIF превращается в PNG (или в JPEG либо WebP, если выбрать их) только с первым кадром. Это полезно, когда нужна статичная миниатюра анимации, и не годится, когда нужна сама анимация.
Если анимированный GIF слишком большой, решать это нужно до кодирования: уменьшить число кадров, размеры или палитру в редакторе GIF либо заменить его коротким видео. Зацикленный MP4 или WebM обычно намного меньше того же ролика в GIF.
Как выглядит GIF в Base64
| Байты | Base64 | Значение |
|---|---|---|
GIF89a | R0lGODlh | GIF89a: анимация, прозрачность |
GIF87a | R0lGODdh | GIF87a: исходный формат 1987 года |
Прозрачный GIF 1×1 ниже занимает 42 байта, или 56 символов Base64:
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="" width="1" height="1">
Когда-то такими заполняли табличную вёрстку, а сейчас он встречается как заглушка в src у изображений с ленивой загрузкой: корректная картинка не даёт показаться значку битого изображения и не требует лишнего запроса.
Размер: GIF быстро растут
По современным меркам GIF сжимает слабо, а анимированный GIF хранит каждый кадр. Двухсекундная гифка-реакция легко весит несколько мегабайт, а в виде Base64 – ещё на несколько мегабайт текста больше. Встраивайте только маленькие GIF, например индикаторы загрузки или крошечные иконки. Всё, что крупнее, лучше держать обычным файлом: его можно закешировать и загрузить лениво, а data URI скачивается заново с каждой страницей, в которой он есть.
Для почты GIF в Base64 подходят плохо. Gmail и другие веб-клиенты не показывают изображения из data URI, поэтому анимированные GIF в рассылках вставляют ссылками на размещённые файлы. См. Base64 в электронной почте.
Кодирование GIF в Node.js
import { readFileSync } from "node:fs";
const gif = readFileSync("spinner.gif");
const uri = `data:image/gif;base64,${gif.toString("base64")}`;
Потоки и URL-safe вывод разобраны в статье Base64 в Node.js. Чтобы превратить строку Base64 обратно в файл, который можно проиграть, используйте Base64 в GIF.
Вопросы и ответы
Остаётся ли анимированный GIF анимированным в Base64?
Да. Base64 копирует файл байт в байт, так что все кадры и тайминги сохраняются. Ломают анимацию только параметры изменения размера, конвертации и удаления метаданных: они перерисовывают первый кадр на canvas и сохраняют его как статичную картинку.
Какой самый маленький прозрачный GIF в виде data URI?
Популярный вариант – data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7, прозрачный GIF 1×1 размером 42 байта. Его до сих пор используют как распорку или заглушку для пустого src.
Почему Base64 моего GIF начинается с R0lGOD?
Это GIF8, начало сигнатуры GIF. R0lGODlh означает GIF89a – версию с поддержкой анимации и прозрачности, а R0lGODdh – более старую GIF87a.