Как перевести Base64 в JPG
- Вставьте строку в поле. Подходят и чистый Base64, начинающийся с
/9j/, и полные URIdata:image/jpeg;base64,, а также тег<img>или правило CSS, в которых он есть. - Строка статуса подтвердит Корректный Base64 и Определено: JPEG, а превью покажет фото с размером в пикселях и размером файла.
- Задайте Имя файла и нажмите Скачать файл.
Большие фото тоже подойдут. Строку Base64 в несколько мегабайт можно вставить или открыть из файла .txt; всё, что больше 4 MB, декодируется без показа в текстовом поле.
Что сохраняется при декодировании JPEG
Декодирование возвращает ровно те байты, что были закодированы. Качество не меняется, ничего не пережимается, поэтому вместе с фото возвращается всё, что было в исходном файле:
- Метаданные EXIF: модель камеры, время съёмки, ориентация и, если была включена геолокация, координаты GPS. Если Base64 прислал вам кто-то другой, фото может рассказать больше, чем он собирался. Если вы собираетесь передать его дальше, сначала удалите метаданные, например через JPG в Base64 с настройкой Удалить метаданные (EXIF).
- Встроенные миниатюры и цветовые профили.
- Данные после конца изображения. Динамические фото (motion photos) с некоторых телефонов на Android дописывают после JPEG короткое видео, поэтому такое «фото» может оказаться в несколько раз больше ожидаемого.
По SHA-256 под превью можно доказать, что сохранённый файл совпадает с хешем, который вам дали.
Как отличить JPEG от того, что только называется JPEG
Декодер смотрит на байты и игнорирует метку. URI data:image/jpeg с данными PNG или поле API photo_jpg, в котором лежит WebP, будут названы своими именами: «Похоже на WebP, а не на JPEG» с кнопкой Скачать как .webp.
CDN для картинок выбирают формат по заголовку Accept браузера, так что картинка, полученная как photo.jpg и закодированная в Base64 в браузере, может оказаться WebP или AVIF. Картинка, скопированная через «Копировать изображение» в браузере, обычно попадает в буфер обмена как PNG, даже если на странице был JPEG, и любой кодировщик, взявший её из буфера, выдаст Base64 от PNG.
Если вам действительно нужен JPEG, переименование не поможет. Сохраните файл в его настоящем формате, затем сконвертируйте его через картинку в Base64, выбрав JPEG в поле Конвертировать в, и декодируйте результат здесь.
Как распознать обрезанный JPEG
Файлы JPEG заканчиваются маркером FF D9. В зависимости от остатка деления длины файла на 3 это даёт одно из трёх окончаний Base64:
| Длина файла mod 3 | Последние байты | Base64 заканчивается на |
|---|---|---|
| 2 | FF D9 | /9k= |
| 1 | .. FF D9 | /2Q== |
| 0 | .. FF D9 | /Z, обычно //Z |
Обрезанный JPEG всё равно декодируется. Браузеры рисуют полученную часть, поэтому низ фото серый или пропадает, а прогрессивный JPEG выглядит размытым. Типичные причины – слишком короткий столбец в базе данных, логгер с ограничением длины строки и мессенджер, который делит длинный текст на части. Скопируйте значение из источника ещё раз.
Та же проверка на Python:
import base64
def check_jpeg(b64: str) -> str:
data = base64.b64decode(b64.split(",", 1)[-1])
if not data.startswith(b"\xff\xd8\xff"):
return "not a JPEG"
end = data.rfind(b"\xff\xd9")
if end < 0:
return "truncated: no end-of-image marker"
extra = len(data) - end - 2
return f"complete, {extra} bytes after the end marker" if extra else "complete"
Считайте её быстрым тестом. JPEG с камеры содержит миниатюру EXIF со своим FF D9, так что сильно обрезанное фото может её пройти. Больше о декодировании файлов можно прочитать в статье Base64 в Python.
Частые проблемы
- Ошибка «Неверная длина». Один символ потерялся или добавился, обычно на переносе строки при копировании. Скопируйте всё значение ещё раз.
- Недопустимый символ
\. Строка пришла из JSON с экранированными слешами (\/9j\/4AAQ...). Пропустите её через починку Base64 или сначала уберите экранирование JSON. - Фото огромное. Base64 скрывает настоящий размер картинки: строка на 4 MB – это фото на 3 MB. Строка Размер показывает размер после декодирования, а размеры в пикселях указаны над превью.
Вопросы и ответы
Какое расширение у декодированного файла: .jpg или .jpeg?
Любое. Оба расширения означают один и тот же формат, и все программы принимают оба. Инструмент использует .jpg; если система требует длинный вариант, впишите jpeg в поле Расширение.
Как проверить, что строка Base64 с JPEG полная?
Полный JPEG заканчивается байтами FF D9, поэтому его Base64 обычно заканчивается на /9k=, /2Q== или /Z. Если строка заканчивается иначе или у картинки нет нижней части, скорее всего, данные обрезаны.
Можно ли посмотреть EXIF декодированного фото?
Поля EXIF инструмент не выводит, но Показать hex-дамп покажет блок Exif и часто производителя камеры в текстовом столбце. Для полного списка скачайте файл и откройте его в просмотрщике EXIF.
Почему в некоторых приложениях декодированное фото повёрнуто?
Телефоны часто сохраняют пиксели боком, а поворот записывают в тег EXIF. Браузеры его учитывают, поэтому превью выглядит правильно, а программы, которые тег игнорируют, показывают исходную ориентацию. Байты в обоих случаях одни и те же.