В Lottie-анимациях изображения могут быть представлены как внешние
файлы или встроенные ресурсы. При работе с Lottie Web ключевое значение
имеет структура секции assets, где описываются все
растровые элементы, используемые в композиции.
Типичный элемент изображения в assets:
{
"id": "image_0",
"w": 512,
"h": 512,
"u": "images/",
"p": "img_0.png",
"e": 0
}
Поля:
id — уникальный идентификатор ресурсаw, h — размеры изображенияu — путь к файлу (URL или папка)p — имя файла или данные изображенияe — флаг режима хранения (0 — внешний файл, 1 —
встроенный ресурс)При использовании внешних файлов Lottie Web загружает изображения по
пути u + p, формируя URL для запроса.
Встроенные изображения используются для устранения внешних
зависимостей и упрощения деплоя. В этом случае содержимое изображения
кодируется в Base64 и помещается непосредственно в поле
p.
Структура встроенного изображения:
{
"id": "image_0",
"w": 256,
"h": 256,
"u": "",
"p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"e": 1
}
Особенности структуры:
u становится пустым, так как внешний путь не
используетсяp содержит data URI с Base64-строкойe устанавливается в 1, указывая на
встроенный ресурсФормат data URI включает MIME-тип изображения и закодированные бинарные данные:
data:[<mediatype>][;base64],<data>
Библиотека Lottie Web обрабатывает assets в момент инициализации
анимации. При встрече объекта с e: 1 выполняется следующий
сценарий:
p интерпретируется как готовый источник
изображенияУпрощённый процесс:
const img = new Image();
img.src = asset.p; // data:image/...;base64,...
После загрузки изображение связывается с соответствующим слоем композиции.
Экспорт из After Effects через Bodymovin может включать опцию встраивания изображений. При включении этого режима выполняется:
u + p на data URIe: 1Результат экспортированного файла становится самодостаточным JSON без внешних зависимостей.
Фрагмент экспортированного assets:
"assets": [
{
"id": "img_1",
"w": 128,
"h": 128,
"u": "",
"p": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...",
"e": 1
}
]
В среде JavaScript преобразование выполняется через
FileReader или fetch с последующей
конвертацией в blob URL.
Пример преобразования:
function toBase64(file) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.onl oad = () => resolve(reader.result);
reader.readAsDataURL(file);
});
}
Результат используется для замены поля p в структуре
Lottie:
const asset = {
id: "img_0",
w: 300,
h: 300,
u: "",
p: base64String,
e: 1
};
Lottie Web инициализирует анимацию через метод
loadAnimation, принимающий JSON с встроенными
ресурсами:
lottie.loadAnimation({
container: document.getElementById("animation"),
renderer: "svg",
loop: true,
autoplay: true,
animationData: animationJson
});
При наличии base64-изображений библиотека не выполняет дополнительных HTTP-запросов, так как все ресурсы уже содержатся внутри JSON.
Использование встроенных изображений влияет на поведение анимации на уровне загрузки и рендеринга:
Base64-данные не разделяются между анимациями, каждая копия JSON содержит полный набор изображений.
При использовании Lottie Web с base64-ресурсами возникают технические ограничения:
Особенно заметно влияние при множественных экземплярах одной анимации на странице.
Сравнение моделей хранения:
Внешний ресурс:
{
"u": "images/",
"p": "img.png",
"e": 0
}
Встроенный base64:
{
"u": "",
"p": "data:image/png;base64,...",
"e": 1
}
Ключевое различие заключается в полном отсутствии зависимости от
файловой системы или CDN при значении e: 1.
При работе с embedded-изображениями критическим становится контроль размера данных. На практике применяются следующие подходы:
Снижение исходного размера изображения напрямую влияет на итоговый размер JSON и скорость парсинга в Lottie Web.
Lottie Web допускает модификацию загруженной анимации через API. Встроенные изображения могут быть заменены аналогично внешним:
animation.updateImage = function(asset) {
asset.p = "data:image/png;base64,...";
asset.e = 1;
};
После обновления требуется перерисовка текущего кадра, так как WebGL/SVG слой не отслеживает изменения бинарного содержимого автоматически.
Поддержка встроенных изображений зависит от выбранного рендерера:
<image> элементыCanvasImageSource<img>Во всех режимах data URI интерпретируется нативно браузером без дополнительных преобразований.
Base64-изображения не участвуют в HTTP-кешировании, так как не являются сетевыми ресурсами. Повторное использование возможно только на уровне:
Отсутствие URL исключает механизмы ETag, Cache-Control и CDN-дистрибуции.