Конвертер JPG в Base64

Кодируйте изображения JPG и JPEG в Base64. Сохраните исходный файл байт в байт или перекодируйте его с более низким качеством и меньшей шириной, чтобы строка осталась короткой.

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

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

  1. Перетащите файл .jpg или .jpeg в область загрузки, нажмите на неё, чтобы выбрать файл, или вставьте изображение.
  2. Чтобы сохранить файл в точности как есть, оставьте в списке «Преобразовать в» значение «Исходный формат». Чтобы уменьшить его, выберите JPEG или WebP и снизьте качество.
  3. Если фотография крупнее, чем будет отображаться, ограничьте её ширину в параметре «Макс. ширина».
  4. Скопируйте нужный результат, например тег img для страницы или чистый Base64 для API, или скачайте его в виде файла.

Кратко о JPEG

JPEG — стандартный формат для фотографий. Он использует сжатие с потерями, отбрасывая детали, которые глаз почти не замечает, и не поддерживает прозрачность. Файлы имеют расширение .jpg, .jpeg или иногда .jfif, но тип MIME всегда image/jpeg; image/jpg не является зарегистрированным типом, хотя многие браузеры его допускают. Data URI для JPEG начинается с data:image/jpeg;base64,/9j/ — это закодированный маркер начала изображения.

Как уменьшить фотографию перед кодированием

Именно на фотографиях Base64 обходится дороже всего: JPEG размером 200 КБ превращается примерно в 270 КБ текста. Сильнее всего на результат влияют две настройки:

  • Макс. ширина. Если уменьшить ширину вдвое, число пикселей сократится в четыре раза. Фотография с телефона шириной 4000 пикселей редко нужна в таком размере.
  • Качество. При значениях около 70–80% изображение на экране обычно выглядит так же, как оригинал, а весит намного меньше. При очень низких значениях появляются блочные артефакты.

Преобразование в WebP с похожим качеством часто даёт ещё меньший результат. Следите за размером после кодирования при каждой настройке и выбирайте самый маленький результат, который ещё выглядит хорошо.

Метаданные EXIF

Фотографии с камер и телефонов содержат метаданные EXIF: модель камеры, дату и время съёмки, а иногда и координаты GPS. Без преобразования результат Base64 содержит исходные байты вместе с метаданными, и любой, кто его декодирует, сможет их прочитать. Именно это нужно, когда важен точный файл, например если API проверяет хеш или считывает дату съёмки.

При преобразовании браузер заново кодирует пиксели, и данные EXIF не переносятся. Результат становится меньше и больше не выдаёт, где была сделана фотография.

Когда data URI для JPEG оправдан

Хорошо подходят крошечные размытые заглушки (изображение шириной 20–40 пикселей, встроенное в страницу, пока полная фотография подгружается отложенно), миниатюры в ответах JSON и HTML-экспорт в одном файле. Главным изображениям страниц и галереям место в отдельных файлах, которые браузер может кешировать.

# Python
import base64
with open('photo.jpg', 'rb') as f:
    uri = 'data:image/jpeg;base64,' + base64.b64encode(f.read()).decode('ascii')

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

JPG и JPEG — это одно и то же?

Да. Более короткое расширение .jpg появилось в системах, где допускалось только три символа. Это один и тот же формат с типом MIME image/jpeg.

Снижает ли кодирование Base64 качество JPEG?

Нет. Base64 представляет байты файла без потерь. Качество меняется, только если выбрать преобразование: тогда изображение заново кодируется с заданным качеством.

Может ли у data URI для JPEG быть прозрачный фон?
Нет, в JPEG нет альфа-канала. Для прозрачности используйте PNG или WebP.
Содержит ли строка Base64 место съёмки моей фотографии?

Может содержать. Если в метаданных EXIF исходного JPEG есть данные GPS и вы кодируете файл без изменений, координаты попадут в строку. При преобразовании изображения метаданные EXIF удаляются.