Генератор data URI

Превратите текст или файл в data: URL для HTML, CSS или JSON с помощью Base64 или процентного кодирования. Вставьте готовый data URI, чтобы узнать его тип MIME, кодировку и размер, просмотреть его и скачать содержимое.

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Введите текст или выберите файл, который нужно встроить.
  2. Проверьте или укажите тип MIME, например image/png или image/svg+xml, и выберите в поле «Кодирование» вариант «Base64» или «Процентное кодирование».
  3. Скопируйте сгенерированный data URI в свой HTML, CSS или JSON.
  4. Чтобы изучить существующий data URI, вставьте его в парсер: вы увидите тип MIME, кодировку, размер и предпросмотр, а также сможете скачать встроенный файл.

Синтаксис data URI

Data URI, описанный в RFC 2397, переносит небольшой файл прямо внутри URL:

data:[<mediatype>][;base64],<data>

data:text/plain;charset=UTF-8,Hello%20world
data:image/png;base64,iVBORw0KGgo...

Медиатип сообщает браузеру, как интерпретировать данные; если он не указан, подразумевается text/plain;charset=US-ASCII. Флаг ;base64 означает, что часть после запятой закодирована в Base64. Без него данные представляют собой обычный текст, в котором специальные символы записаны с помощью процентного кодирования.

Base64 или процентное кодирование

Base64 — правильный выбор для двоичных файлов, таких как PNG, JPEG, WebP, шрифты и PDF. Он всегда добавляет около 33%. Для текстовых форматов процентное кодирование часто даёт меньший размер, потому что большинство символов остаются как есть и экранировать нужно лишь немногие, например <, >, #, % и двойные кавычки. Поэтому оно хорошо подходит для значков SVG, а читаемый результат к тому же лучше сжимается gzip или Brotli. Однако каждый байт текста не из ASCII превращается в три символа, поэтому для китайского текста или кириллицы Base64 обычно короче. Если сомневаетесь, попробуйте оба варианта и оставьте более короткий результат.

/* SVG с процентным кодированием в CSS: внутри одинарные кавычки, # записан как %23 */
.dot { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Ccircle cx='4' cy='4' r='4' fill='%23f60'/%3E%3C/svg%3E"); }

Когда встраивание оправдано

Data URI экономит HTTP-запрос, но данные становятся частью документа, в котором находятся:

  • Нет отдельного кеширования. Изображение, встроенное в HTML, загружается заново с каждой страницей. Изображение, встроенное в таблицу стилей, кешируется вместе с ней, но любое его изменение делает недействительным кеш всей таблицы стилей.
  • Более медленная первая отрисовка. Большие data URI в CSS задерживают отрисовку, потому что браузер сначала должен загрузить и разобрать всю таблицу стилей.
  • Увеличение размера. Base64 добавляет треть объёма, и сжатие HTML или CSS компенсирует это лишь частично.

В HTTP/2 и HTTP/3 дополнительные запросы обходятся дёшево, поэтому встраивайте только небольшие ресурсы размером в несколько килобайт, например значки, крошечные заглушки или критически важный фон, а всё остальное отдавайте обычными файлами. Сайтам с Content Security Policy нужно разрешить data: в img-src или font-src, чтобы встроенные изображения и шрифты загружались.

Часто задаваемые вопросы

Есть ли ограничение на размер data URI?

RFC 2397 не устанавливает ограничений, и современные браузеры принимают data URI размером в несколько мегабайт в изображениях и таблицах стилей. Тем не менее большие data URI — плохая идея: они раздувают страницу, не кешируются отдельно и дольше разбираются.

Почему data URI не открывается, когда я нажимаю на ссылку с ним?

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

Как использовать data URI в HTML и CSS?
Подставьте его туда, где ожидается URL: <img src="data:image/png;base64,..."> в HTML или background-image: url("data:image/svg+xml,...") в CSS. В CSS заключайте значение в кавычки, особенно для SVG с процентным кодированием.
Нужно ли указывать кодировку?
Для текстовых типов, таких как text/plain или text/html, содержащих символы не из ASCII, — да: добавьте ;charset=UTF-8 после медиатипа, иначе из-за кодировки US-ASCII по умолчанию они могут отобразиться искажённо. Двоичным типам, таким как image/png, кодировка не нужна.
Как превратить изображение в data URI?
Выберите файл изображения здесь или воспользуйтесь конвертером изображений в Base64: он также умеет предварительно изменить размер или формат изображения и выдаёт готовые фрагменты кода HTML, CSS и Markdown.