Главная / Изображения и графика / Конвертер SVG в Data URI
SVG

Встраиваемое представление SVG в формате Data URI

Преобразуйте SVG в Data URI для использования в коде.

Бесплатный лимит - 1 000 символов. Свыше лимита - 50 ₽.

SVG-код
в строку Data URI

Преобразование SVG-разметки в готовую строку для вставки в код.

SVG
Data URI
Вставка

SVG в строку для вставки

Создайте Data URI из SVG-кода для HTML или CSS.

Результат
—
После обработки здесь появится Data URI.

Онлайн-конвертер формирует встраиваемое представление SVG в формате Data URI путем прямого преобразования исходного кода векторного изображения в единую текстовую строку. В качестве входных данных инструмент принимает XML-разметку графического файла. На выходе генерируется готовая последовательность символов со схемой data:, пригодная для немедленной вставки в код веб-страницы. Такая обработка избавляет от необходимости хранить мелкую графику в отдельных файлах на сервере.

Главная цель операции - внедрение векторных элементов непосредственно в CSS-правила или HTML-разметку без загрузки внешних графических ресурсов по сети.

В процессе конвертации исходная разметка изображения очищается от переводов строк и приводится к синтаксису, безопасному для чтения браузером внутри стилевых свойств или атрибутов тегов. Специальные символы разметки экранируются или кодируются выбранным методом, чтобы исключить синтаксические конфликты с окружающим кодом таблицы стилей или документа. Полученную строку можно сразу передать внутрь CSS-функции url() для задания фонового рисунка либо указать в качестве значения атрибута src у стандартного тега изображения. Браузер считывает и отрисовывает такую графику напрямую из текстового кода страницы.

Конвертер SVG в Data URI

Синтаксис строки Data URI и методы кодирования SVG

Строка Data URI для векторной графики строится по строгому стандарту и состоит из заголовка с метаданными и самой полезной нагрузки - закодированной разметки изображения. Чтобы браузер правильно распознал и отрисовал графику из текстового потока, все элементы конструкции должны идти в точной последовательности без пробелов в управляющей части.

data:image/svg+xml;charset=UTF-8,<svg ...>...</svg>

Базовая структура встраиваемой строки включает четыре обязательных сегмента:

  • Схема data: - префикс протокола, который указывает браузеру, что ресурс нужно извлечь напрямую из самой строки, а не запрашивать по внешнему адресу.
  • MIME-тип image/svg+xml - идентификатор формата данных, сообщающий движку рендеринга, что внутри находится именно векторное изображение на базе XML.
  • Параметр кодировки или метода представления - блок вида ;charset=UTF-8 для текстового режима либо маркер ;base64 для бинарного кодирования.
  • Разделитель данных , - одиночная запятая, которая отделяет служебные заголовки от самого содержимого графического файла. Всё, что расположено правее этой запятой, интерпретируется как код рисунка.

Процентное кодирование текста UTF-8 и экранирование символов

Поскольку исходный SVG представляет собой обычный текст, его необязательно переводить в нечитаемый бинарный вид. Достаточно применить процентное кодирование (URL-encoding) в кодировке UTF-8. При таком подходе основная структура тегов и имена атрибутов остаются в исходном текстовом виде, а замене подвергаются только символы, которые зарезервированы стандартом URI или конфликтуют с синтаксисом таблиц стилей и разметки документа.

Самая частая ошибка при ручной вставке векторного кода в CSS связана с шестнадцатеричными кодами цветов. В спецификации адресов символ решетки обозначает начало фрагмента документа (якоря). Если оставить в коде конструкцию вроде fill="#ff0000" , браузер воспримет решетку как конец данных изображения и оборвет чтение строки, из-за чего картинка не отобразится. При процентном кодировании решетка принудительно заменяется на последовательность %23 .

Для безопасной передачи векторной разметки внутри строкового литерала экранированию подвергаются следующие специальные символы:

  • Решетка - заменяется на %23 , что критически важно для сохранения работоспособности HEX-палитры и внутренних ссылок на градиенты или маски по их идентификаторам.
  • Угловые скобки < и > - преобразуются в %3C и %3E соответственно, чтобы парсер страницы не перепутал внутренние теги вектора с тегами самого документа.
  • Двойные кавычки " - переводятся в %22 (если не были заменены на одинарные), иначе первая же кавычка внутри атрибута преждевременно закроет внешнюю строковую обертку.
  • Пробелы - при полном кодировании заменяются на %20 , а при щадящем режиме сжимаются до одиночных пробелов между атрибутами для сохранения компактности.
  • Символ процента % - экранируется как %25 , что необходимо, когда ширина, высота или координаты элементов внутри графики заданы в относительных процентных величинах.

Сравнение текстового представления UTF-8 и кодирования Base64

Помимо процентного экранирования, для формирования строки Data URI используется алгоритм Base64. Он переводит последовательность байтов исходного текста в набор из 64 безопасных печатных латинских символов, цифр и знаков плюса и слеша. Оба метода дают одинаковый визуальный результат на экране, но существенно различаются по весу кода, удобству поддержки и поведению при сетевой передаче.

Различия между двумя подходами к кодированию векторной разметки приведены в сравнительной таблице:

Критерий сравнения Текстовый формат (URL-encoded UTF-8) Кодирование Base64
Итоговый размер строки в байтах Незначительно превышает размер исходника только за счет трехсимвольных замен типа %3C Стабильно увеличивает объем данных примерно на треть по сравнению с чистым кодом за счет перевода каждых 3 байтов в 4 символа
Читаемость и редактирование кода Высокая: названия тегов, координаты и коды цветов легко читаются и правятся вручную прямо в таблице стилей Нулевая: строка выглядит как сплошной набор случайных букв и цифр, для любого изменения требуется декодирование
Эффективность сжатия Gzip и Brotli Максимальная: повторяющиеся текстовые паттерны и стандартные имена атрибутов отлично распознаются и сжимаются словарными алгоритмами Низкая: отсутствие читаемых слов и высокая энтропия символов мешают алгоритмам находить дублирующиеся цепочки
Защита от синтаксических сбоев Зависит от корректности экранирования кавычек и спецсимволов в окружающей среде Абсолютная: выходной алфавит вообще не содержит кавычек, скобок, пробелов или решеток

При использовании текстового сжатия на стороне веб-сервера разница в производительности становится еще заметнее. Алгоритмы Gzip и Brotli сжимают файлы за счет поиска повторяющихся текстовых фрагментов. В строке UTF-8 постоянно встречаются одинаковые конструкции, которые идентичны словам в остальном документе или файле стилей. Поэтому серверные архиваторы сжимают такие участки с высокой плотностью. В случае с Base64 одни и те же фрагменты разметки после смещения на один байт превращаются в совершенно разные комбинации символов, из-за чего сжатый пакет весит ощутимо больше.

Требования к исходному SVG-коду и его предварительная подготовка

Для безошибочного отображения графики после перевода в формат Data URI исходный XML-код должен соответствовать строгим синтаксическим правилам. При прямом добавлении тега <svg> внутрь HTML-разметки браузер автоматически распознает графический контекст и прощает мелкие неточности. Однако строка Data URI обрабатывается движком рендеринга как полностью изолированный внешний XML-документ, где любая пропущенная декларация или лишний управляющий символ приводят к сбою отрисовки.

Обязательное объявление пространства имен XML

Главное техническое требование к корневому элементу <svg> при подготовке к кодированию - наличие атрибута пространства имен xmlns="http://www.w3.org/2000/svg" . В изолированном контексте Data URI парсер браузера не привязан к глобальной схеме документа HTML5. Без явного указания xmlns браузер воспринимает переданный код как произвольное дерево неизвестных XML-тегов и вместо векторного изображения выводит пустую область или иконку поврежденного файла.

Если внутри графики задействованы устаревшие конструкции со связями (например, xlink:href для переиспользования элементов через тег <use> ), корневой тег также должен содержать дополнительный атрибут xmlns:xlink="http://www.w3.org/1999/xlink" . В современной верстке от него избавляются, заменяя xlink:href на стандартный атрибут href .

Атрибуты геометрии и масштабирования векторных примитивов

Поведение внутренних фигур и контейнеров - таких как кривые path , прямоугольники rect , окружности circle и группирующие элементы g - напрямую зависит от параметров координатной сетки, заданных в открывающем теге <svg> . Неправильная комбинация размерных атрибутов часто становится причиной того, что встроенная иконка обрезается, непропорционально растягивается или сжимается до нулевых размеров.

В следующей таблице описана роль ключевых атрибутов геометрии и их влияние на отображение графики в формате Data URI:

Атрибут Техническое назначение Поведение при отсутствии или некорректной настройке
viewBox Задает внутреннюю систему координат холста через четыре числа ( min-x min-y width height ), относительно которых вычисляются координаты всех path , rect , circle и групп g Графика теряет способность к пропорциональному масштабированию: при уменьшении внешнего контейнера часть рисунка просто обрезается по краям
width и height Определяют базовые (естественные) физические габариты изображения в пикселях или других единицах при первичном рендеринге В ряде контекстов без жестко заданных внешних границ изображение может схлопнуться или занять всю доступную ширину родительского блока
preserveAspectRatio Управляет выравниванием и масштабированием области viewBox , когда пропорции внешнего контейнера не совпадают с пропорциями исходного рисунка По умолчанию действует режим xMidYMid meet (вписывание по центру с сохранением пропорций); при установке значения none векторные примитивы деформируются по осям

Оптимальная практика подготовки исходника - обязательно указывать корректный viewBox (например, viewBox="0 0 24 24" ) в паре с численными значениями width и height без единиц измерения. Это гарантирует предсказуемое масштабирование вектора в любых условиях.

Предварительная очистка от служебной разметки и метаданных

Файлы, экспортированные напрямую из векторных графических редакторов вроде Adobe Illustrator или Inkscape, содержат большой объем вспомогательной информации. Эта разметка нужна самим программам для сохранения истории слоев, направляющих и настроек рабочей среды, но совершенно бесполезна для браузера. При переводе в строку Data URI каждый лишний символ увеличивает длину итогового кода.

Перед кодированием исходный SVG-код рекомендуется очистить от следующих избыточных конструкций:

  • Инструкции обработки и декларации документа: заголовок <?xml version="1.0" encoding="utf-8"?> и объявления <!DOCTYPE svg ...> не нужны для строки Data URI и только создают лишние символы при экранировании.
  • Комментарии: любые блоки вида <!-- Generator: Adobe Illustrator ... --> можно безопасно вырезать.
  • Специфические пространства имен и теги редакторов: атрибуты xmlns:sodipodi , xmlns:inkscape , xmlns:dc , xmlns:cc , xmlns:rdf , а также целые блоки <metadata> и <sodipodi:namedview> удаляются без малейшего влияния на внешний вид фигур.
  • Пустые контейнеры и невидимые элементы: пустые группы <g></g> , неиспользуемые секции <defs> и фигуры со свойством display="none" .
  • Форматирующие пробелы и переносы строк: табуляция, переводы каретки ( \n , \r ) и множественные пробелы между тегами при процентном кодировании превращаются в последовательности %20 или %0A , раздувая объем строки. Сведение разметки в одну плотную строку заметно сокращает итоговый результат.

Нормализация кавычек для предотвращения синтаксических конфликтов

В стандарте XML для оборачивания значений атрибутов одинаково допустимы как двойные ( "..." ), так и одинарные ( '...' ) кавычки. Однако при формировании строки Data URI выбор типа кавычек внутри SVG-разметки приобретает критическое значение.

Сгенерированная строка почти всегда помещается внутрь внешней синтаксической обертки - например, в функцию url("...") таблицы стилей CSS или в атрибут HTML-разметки. В веб-разработке для таких внешних оберток по умолчанию принято использовать двойные кавычки. Если внутри самого SVG-кода атрибуты также записаны через двойные кавычки и не переведены в шестнадцатеричный код %22 , первый же символ " (например, в записи xmlns="http... ) будет воспринят парсером как преждевременное закрытие внешней функции url(" . Это моментально сломает правило стилей или верстку.

Чтобы избежать конфликта и одновременно не засорять строку громоздкими последовательностями %22 , применяется нормализация кавычек: все двойные кавычки внутри исходного SVG-кода заменяются на одинарные. Символ апострофа ' не требует процентного кодирования по стандарту URI, занимает ровно один байт и позволяет безопасно оборачивать всю строку Data URI в стандартные двойные кавычки.

Ниже показан пример исходного фрагмента до и после предварительной подготовки и нормализации кавычек:

<!-- Исходный неочищенный фрагмент -->
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Inkscape -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 16 16">
    <g>
        <circle fill="#FF5733" cx="8" cy="8" r="8"/>
    </g>
</svg>

<!-- Подготовленный код в одну строку с одинарными кавычками -->
<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><circle fill='#FF5733' cx='8' cy='8' r='8'/></svg>

Такая подготовленная строка содержит только необходимые для рендеринга данные, сохраняет полную читаемость атрибутов и готова к переводу в компактное представление Data URI без риска синтаксических сбоев.

Способы встраивания полученной строки Data URI в CSS и HTML

После очистки и кодирования строка Data URI готова к подстановке во фронтенд-код. В зависимости от задачи верстки полученное текстовое представление передается либо в функцию url() таблиц стилей, либо в атрибуты элементов разметки и шаблоны компонентных фреймворков.

Использование строки внутри CSS-свойств

В таблицах стилей строка Data URI оборачивается в стандартную функцию url("...") и работает идентично ссылке на внешний графический файл. Поскольку векторное изображение передается как изолированный ресурс, прямые CSS-селекторы документа не могут обращаться к его внутренним тегам напрямую. Управление отображением осуществляется через свойства самого контейнера или за счет применения CSS-масок.

Фоновые изображения и декоративные элементы

Базовый сценарий - назначение векторной графики фоном элемента через свойство background-image . Для предсказуемого позиционирования и масштабирования иконки или паттерна свойство комбинируют с сопутствующими параметрами фона:

.icon-button {
    width: 24px;
    height: 24px;
    background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle fill='%23FF5733' cx='8' cy='8' r='8'/%3E%3C/svg%3E");
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
}

Помимо основного фона, функция url() со строкой Data URI применяется в ряде специализированных CSS-свойств для оформления интерфейсных деталей:

  • В свойстве content псевдоэлементов ::before и ::after для вывода декоративных индикаторов или стрелок рядом с текстом без создания лишних узлов в DOM-дереве. При таком подходе размер графики жестко определяется атрибутами width и height внутри самого SVG.
  • В свойстве list-style-image для замены стандартных маркеров списков <ul> на кастомные векторные буллиты.
  • В свойстве border-image (или border-image-source ) для формирования сложных геометрических рамок и разделителей, которые масштабируются по краям блока без потери четкости.

Динамическое перекрашивание через CSS-маскирование

При встраивании SVG через background-image цвет иконки фиксирован внутри самой строки Data URI. Если при наведении курсора (состояние :hover ) или переключении темы интерфейса требуется плавно менять цвет графики средствами CSS, используется свойство mask-image .

Принцип маскирования заключается в том, что встроенный через Data URI вектор выступает в роли трафарета (альфа-канала), а реальный цвет задается обычным свойством background-color самого HTML-элемента:

.masked-icon {
    width: 20px;
    height: 20px;
    background-color: #333333;
    mask-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 0L10 6H16L11 10L13 16L8 12L3 16L5 10L0 6H6L8 0Z'/%3E%3C/svg%3E");
    mask-size: contain;
    mask-repeat: no-repeat;
    mask-position: center;
    transition: background-color 0.2s ease;
}

.masked-icon:hover {
    background-color: #0066CC;
}

Такой прием избавляет от необходимости генерировать и вставлять в код две разные строки Data URI для обычного и активного состояния кнопки.

Встраивание в HTML-разметку и компонентные фреймворки

Когда векторное изображение несет смысловую нагрузку и должно присутствовать в разметке как контентный элемент, строка Data URI подставляется непосредственно в атрибут src тега <img> . Это позволяет задать обязательный атрибут alt для доступности и управлять размерами картинки через стандартные HTML-атрибуты:

<img src="data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle fill='%23FF5733' cx='8' cy='8' r='8'/%3E%3C/svg%3E" alt="Статус задачи" width="16" height="16">

В компонентных фреймворках, таких как React JSX и Vue, встраивание через Data URI решает проблему совместимости синтаксиса. Прямая вставка сырого SVG-кода в React JSX требует переименования многих атрибутов в формат camelCase (например, stroke-width в strokeWidth ), тогда как строка Data URI передается в src как обычная текстовая константа или переменная без модификации внутренних XML-атрибутов:

// Пример компонента в React JSX
const statusIconUri = "data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle fill='%2328A745' cx='8' cy='8' r='8'/%3E%3C/svg%3E";

export function StatusBadge() {
    return <img src={statusIconUri} alt="Активен" width={16} height={16} />;
}

Аналогичным образом в шаблонах Vue строка привязывается через директиву v-bind:src (или сокращенно :src ), что удобно для хранения набора мелких системных иконок в едином словаре конфигурации приложения.

Прямое редактирование стилизации внутри строки Data URI

Использование текстового процентного кодирования вместо Base64 сохраняет читаемость структуры SVG прямо внутри CSS-правила или HTML-атрибута. Разработчик может менять визуальные характеристики векторных примитивов на месте, редактируя соответствующие атрибуты внутри самой строки Data URI без повторного обращения к графическому редактору или конвертеру.

Ниже приведены основные графические атрибуты SVG и правила их ручной модификации непосредственно внутри закодированной строки:

Атрибут SVG Назначение Пример записи в строке Data URI Технический нюанс при редактировании
fill Цвет внутренней заливки фигуры fill='%230055FF' или fill='none' При указании цвета в формате HEX символ решетки обязательно заменяется на последовательность %23 . Именованные цвета ( red , black ) или rgb(0,85,255) пишутся без экранирования.
stroke Цвет линии обводки контура stroke='%23333333' Как и в заливке, шестнадцатеричный код цвета требует префикса %23 вместо символа решетки.
stroke-width Толщина линии обводки stroke-width='2' или stroke-width='1.5' Значение задается в пользовательских единицах координатной сетки viewBox . При изменении толщины важно следить, чтобы края обводки не обрезались границами холста.
opacity Общая прозрачность элемента или группы opacity='0.5' Принимает дробные значения от 0 до 1 через точку. Для раздельного управления прозрачностью заливки и контура используются атрибуты fill-opacity и stroke-opacity .

Возможность прямого доступа к этим параметрам в коде также позволяет динамически формировать строки Data URI на уровне JavaScript - например, подставлять нужный HEX-код цвета (с префиксом %23 ) или толщину линии через шаблонные строки перед рендерингом компонента.

Влияние инлайн-графики Data URI на веб-производительность и безопасность

Встраивание векторных изображений непосредственно в код документа или таблицы стилей меняет механику загрузки страницы. Вместо инициализации отдельных сетевых соединений для каждого графического файла браузер получает данные векторного объекта в составе основного потока HTML или CSS. Такой архитектурный подход напрямую влияет на скорость первичной отрисовки интерфейса, правила кэширования ресурсов и требования к политике безопасности веб-приложения.

Сетевая производительность, рендеринг и кэширование

Основное преимущество инлайн-представления Data URI заключается в сокращении количества отдельных HTTP-запросов к серверу. При загрузке мелких интерфейсных элементов, таких как стрелки навигации, индикаторы состояний, чекбоксы или фоновые иконки, накладные расходы на установку соединения и ожидание ответа сервера часто превышают время передачи самого файла. Встроенная строка обрабатывается парсером мгновенно по мере чтения стилевого файла или разметки.

Одновременное получение кода разметки и графических данных устраняет задержку между построением дерева документа и отрисовкой визуальных элементов. Если для контейнера или тега изображения заранее заданы геометрические размеры, использование инлайн-графики предотвращает визуальный сдвиг макета (layout shift) и исключает эффект мелькания пустых блоков при первичной загрузке. Поскольку браузер оперирует исходными математическими координатами вектора, изображения сохраняют абсолютную четкость рендеринга на экранах Retina и дисплеях с высокой плотностью пикселей (high-DPI) при любом уровне масштабирования страницы.

Обратная сторона этого метода связана с управлением памятью и кэшированием на стороне клиента. Перенос графики внутрь кода увеличивает итоговый объем CSS-бандла или HTML-документа. В случае с таблицами стилей, которые являются ресурсами, блокирующими рендеринг, чрезмерное количество встроенных векторных строк способно замедлить первичную отрисовку страницы.

При выборе между внешним файлом и встроенной строкой необходимо учитывать особенности браузерного кэширования и характер использования графики в проекте:

Критерий оценки Встроенная строка Data URI Внешний файл SVG
Сетевые запросы Отсутствуют, данные передаются внутри основного документа или таблицы стилей Требуется отдельный HTTP-запрос для каждого уникального файла
Браузерное кэширование Отсутствует независимое кэширование; изображение кэшируется только вместе с родительским CSS или HTML Независимое хранение в кэше браузера с собственными заголовками времени жизни
Обновление ресурсов Изменение одной иконки в CSS сбрасывает кэш всего стилевого бандла, а при изменении стиля страницы заново скачивается вся встроенная в него графика Обновление конкретного изображения не затрагивает кэш стилей и других графических файлов
Дублирование данных в DOM При многократной вставке в HTML-атрибуты одна и та же строка физически дублируется в коде страницы, увеличивая его вес В разметке дублируется только короткий путь к файлу, сам ресурс загружается один раз

Из-за отсутствия независимого кэширования встраивание в формате Data URI технически оправдано для компактных иконок, используемых через общие CSS-классы, а также для критически важной графики первого экрана. Крупные иллюстрации, сложные логотипы со множеством узлов или иконки, которые динамически дублируются в десятках узлов HTML-разметки, эффективнее подключать как внешние ресурсы или выносить в единый векторный спрайт.

Требования безопасности, CSP и защита от XSS

Поскольку формат SVG базируется на расширяемой разметке XML, векторный документ потенциально может содержать не только геометрические примитивы, но и исполняемый код. При загрузке графики через свойство background-image или тег <img> современные браузеры обрабатывают изображение в изолированном контексте безопасности и блокируют выполнение внутренних скриптов. Тем не менее при подготовке исходного кода перед конвертацией в строку Data URI важно соблюдать строгую гигиену данных, особенно если векторные файлы поступают из внешних источников или загружаются пользователями.

Для предотвращения XSS-уязвимостей и ошибок парсинга исходный векторный код перед преобразованием не должен содержать потенциально опасных конструкций:

  • Тегов <script> с любым встроенным или подключаемым кодом.
  • Элементов <foreignObject> , которые позволяют внедрять произвольную HTML-разметку и сторонние фреймы внутрь векторного холста.
  • Инлайн-обработчиков событий в атрибутах элементов, таких как onload , onerror , onclick или onmouseover .
  • Внешних ссылок в атрибутах href и xlink:href , указывающих на сторонние сетевые ресурсы или использующих псевдопротокол javascript: .

Отдельного внимания требует конфигурация заголовков безопасности сервера. На проектах со строгими правилами CSP браузер по умолчанию блокирует загрузку любых встроенных данных через схему data: , расценивая их как потенциальный вектор инъекции контента. В результате иконки в формате Data URI перестают отображаться на странице, а в консоли разработчика фиксируется нарушение директивы безопасности.

Для корректного рендеринга встроенной векторной графики в политику CSP необходимо явно добавить разрешение data: в директиву, отвечающую за загрузку изображений:

Content-Security-Policy: default-src 'self'; img-src 'self' data:;

Директива img-src 'self' data: указывает браузеру, что графические ресурсы разрешено загружать как с текущего домена, так и непосредственно из текстовых строк Data URI, расположенных в таблицах стилей или атрибутах тегов изображений.

Нужен другой
инструмент для SVG?

Откройте раздел инструментов для изображений и выберите подходящую операцию.

Все инструменты