Перейти к содержимому

Анимированный SVG

Изображение SVG с анимациями SMIL или CSS: воспроизводится браузером в HTML, анимированные фигуры в PowerPoint и OpenDocument, анимированный GIF там, где они не могут этого выразить, начальное состояние в PDF и изображениях.

Изображение SVG, которое анимируется само, записывается как любое изображение:

![](spinner.svg)
![w:400](chart.svg)

Что читается

Анимации, записанные в самом файле SVG: SMIL (animate, animateTransform, animateMotion, animateColor, set, с begin, dur, repeatCount, fill, calcMode, keyTimes и keySplines) и CSS (@keyframes со свойствами animation, transform-origin и transform-box). То, что не распознано, например событие вроде begin="click", пропускается и сообщается предупреждением: ничто не отбрасывается молча.

Что показывает каждый вывод

  • HTML: браузер сам воспроизводит анимации.
  • PowerPoint (--pptx) и OpenDocument (--odp): каждый анимированный элемент — отдельная фигура, а его анимации стартуют вместе со слайдом: движение, вращение и масштаб, прозрачность, переход между двумя цветами. Движение элемента дискретизируется в собственные моменты анимации, поэтому ускорения, несколько ключевых кадров и вращение вокруг другой точки точны. Повторы (в том числе indefinite), задержки и обратные ходы переносятся.
  • Кадры: когда анимацию нельзя выразить так (контур, который деформируется, линия, которая рисуется, наклон), всё изображение рендерится в собственные моменты анимации и встраивается как анимированный GIF, который воспроизводят PowerPoint и Impress. Это ограничено: 12 кадров в секунду, не более 240 кадров, 16 миллионов пикселей на все кадры вместе.
  • PDF (--pdf) и изображения (--images): они не могут анимироваться. Рисунок показан в начальном состоянии, без JavaScript и без RichMedia, а одно предупреждение называет анимированные изображения.

Каждое анимированное изображение получает одну строку предупреждения с кодом svg-animation, которая говорит, как оно перенесено: нативно или кадрами и почему.

Поддержка по выводам

ВозможностьHTMLPowerPointOpenDocumentPDF и изображения
Сдвиг, движение по контурувоспроизводитсянативнонативноначальное состояние
Вращение и масштаб вокруг любой точкивоспроизводитсянативнонативноначальное состояние
Радиус круга, размер прямоугольника (без обводки)воспроизводитсянативнонативноначальное состояние
Прозрачность элемента из одной фигурывоспроизводитсянативнонативноначальное состояние
Цвет заливки или обводки, от одного цвета к другомувоспроизводитсянативнонативноначальное состояние
Повторы, задержки, обратные ходы, удержание в концевоспроизводитсянативнонативноначальное состояние
Ускорения, несколько ключевых кадроввоспроизводитсянативно (с выборкой)нативно (с выборкой)начальное состояние
Шаги, дискретные изменениявоспроизводитсякадрыкадрыначальное состояние
Деформация контура, сдвиг штрихов, атрибуты положения и размера, градиентывоспроизводитсякадрыкадрыначальное состояние
Наклон, отражение, несколько часов у одного элемента, вложенные анимированные элементывоспроизводитсякадрыкадрыначальное состояние
Событиявоспроизводитсяне переносится (предупреждение)не переносится (предупреждение)начальное состояние

Локальные файлы

Локальное изображение читается только с --allow-local-files, из папки презентации, как в marp-cli. Без этого параметра изображение остаётся вне экспорта, а сборка сообщает об этом через local-file-blocked, называя файл, его слайды и параметр. Файл, которого нет, сообщается как local-file-missing.

Ограничения

SVG — недоверенные входные данные, поэтому он ограничен: 8 МиБ SVG, 50 000 элементов, 2 000 анимаций, 256 ключевых кадров одной анимации, 60 секунд временной шкалы и 240 кадров. Рисунок, выходящий за границу, отклоняется с предупреждением, а сборка продолжается.

Что проверено

LibreOffice Impress (macOS) открывает файлы PowerPoint и OpenDocument и сохраняет каждую анимацию при повторном сохранении в обоих форматах. Keynote (macOS) импортирует фигуры и анимированный GIF; его анимации не проверялись. PowerPoint: пока не проверено.

Created on by tannevaled

Modified on by tannevaled