EXIF-блок в изображении может содержать координаты съёмки, точную временную метку, модель камеры, настройки экспозиции, уникальный идентификатор устройства и даже встроенное миниатюрное превью. Когда файл загружается в онлайн-сервис для просмотра метаданных, вся эта информация попадает к третьей стороне вместе с самим изображением. Локальная проверка исключает утечку данных и работает без интернета — критично для работы с конфиденциальными материалами, журналистики, расследований или просто соблюдения цифровой гигиены.
- Что именно хранится в EXIF и зачем это проверять
- Инструменты командной строки: максимальный контроль и автоматизация
- ExifTool — де-факто стандарт
- Exiv2 — быстрый C++ альтернативный вариант
- ImageMagick — когда нужен одновременный доступ к пикселям и метаданным
- GUI-инструменты: визуальный анализ без терминала
- Скриптовые подходы: Python, PowerShell, Bash
- Python: Pillow, piexif, exifread
- PowerShell (Windows без сторонних утилит)
- Bash-однострочники для Linux/macOS
- Что проверять в первую очередь: чек-лиск приоритетов
- Типичные ошибки и как их избежать
- Сценарии: как действовать в типичных ситуациях
- Сценарий 1: Подготовка фото к публикации в открытую сеть
- Сценарий 2: Верификация подлинности полученного изображения
- Сценарий 3: Массовый аудит архива на утечки персональных данных
- Ограничения локального подхода
- Практический следующий шаг
- FAQ
- Можно ли проверить EXIF на телефоне без загрузки в облако?
- Почему после очистки EXIF файл стал меньше всего на пару килобайт?
- Как проверить, что миниатюра соответствует основному изображению?
- Нужно ли удалять EXIF из скриншотов и сканов?
- Как автоматизировать очистку при загрузке фото с камеры на Linux?
Что именно хранится в EXIF и зачем это проверять
Стандарт EXIF (Exchangeable Image File Format) встроен в JPEG, TIFF, HEIC и некоторые RAW-форматы. PNG использует свои чанки (tEXt, iTXt, zTXt), но часто также переносит EXIF-блок. Основные категории данных:
- Геолокация: широта, долгота, высота, направление движения, точность GPS-приёмника.
- Временные метки: DateTimeOriginal (момент нажатия затвора), DateTimeDigitized, DateTime (файловая модификация), субсекундная точность, смещение часового пояса (OffsetTime).
- Идентификация оборудования: Make, Model, SerialNumber, LensModel, LensSerialNumber, CameraOwnerName, BodySerialNumber.
- Параметры съёмки: выдержка, диафрагма, ISO, фокусное расстояние, режим измерения, режим вспышки, баланс белого, программа экспозиции.
- Программные теги: Software (редактор, ОС, прошивка), ProcessingSoftware, UniqueImageID (UUID), OwnerName, Copyright, ImageDescription, UserComment.
- Миниатюра: встроенный JPEG-превью (обычно 160×120 px), которое может не обновляться при редактировании основного кадра и показывать исходный кадр.
- MakerNotes: проприетарные данные производителя (фокусные точки, настройки автофокуса, температура матрицы, номер затвора и др.).
- GPS-координаты: Exif.GPSInfo.GPSLatitude, GPSLongitude, GPSAltitude. Даже если значения нулевые, наличие блока говорит о включённом геотегинге.
- Временная цепочка: DateTimeOriginal vs DateTimeDigitized vs DateTime (FileModifyDate). Расхождения указывают на редактирование или смену часового пояса.
- Серийные номера: SerialNumber, LensSerialNumber, BodySerialNumber, CameraOwnerName. Привязывают кадр к конкретному устройству и владельцу.
- Software / ProcessingSoftware: показывает, через что прошло изображение (Photoshop, Lightroom, смартфон-редактор, сканер).
- Миниатюра: извлеките и откройте её отдельно. Если на превью другой кадр или есть удалённые объекты — основной файл был перезаписан без обновления thumbnail.
- UniqueImageID / ImageUID: UUID, генерируемый камерой или редактором. Позволяет связать разные версии одного файла.
- MakerNotes: часто содержат фокусные точки, номер затвора, температуру сенсора — косвенные признаки подлинности и условий съёмки.
- Проверка только одного файла из серии. Настройки камеры и синхронизация времени могут меняться. Проверяйте представитивную выборку.
- Игнорирование миниатюры. Многие редакторы (в т.ч. мобильные) не обновляют встроенный thumbnail. Он может раскрыть исходный кадр, лицо, номерной знак, документ.
- Удаление EXIF через «Сохранить как» в редакторе. Не все программы чистят MakerNotes, ICC-профили, XMP или миниатюру. Используйте специализированные инструменты с флагом -all= или -strip.
- Доверие к одному инструменту. Разные парсеры показывают разный набор тегов (особенно MakerNotes). Кросс-проверьте ExifTool и Exiv2 или GUI.
- Забывание о сайдкарах (XMP) и альтернативных потоках. RAW-файлы часто сопровождаются .xmp. На macOS метаданные могут лежать в расширенных атрибутах (xattr). Проверяйте папку целиком.
- Перезапись оригинала без бэкапа. Всегда работайте с копией. ExifTool по умолчанию создаёт _original, но флаг -overwrite_original отключает это.
- Скопируйте исходники в рабочую папку.
- Запустите exiftool -all= -tagsfromfile @ -Orientation -ColorSpace -ICC_Profile -XMP:All= *.jpg — удалит всё, оставит ориентацию, цветовой профиль и XMP (если нужен для авторства).
- Проверьте результат: exiftool -gps:all -datetimeoriginal -make -model -serialnumber *.jpg — должны быть пустыми или отсутствовать.
- Извлеките и проверьте миниатюры: exiftool -b -ThumbnailImage -w %d%f_thumb.jpg *.jpg — откройте несколько случайных.
- Если всё чисто — публикуйте копии, оригиналы храните отдельно.
- Получите полный дамп: exiftool -a -u -g1 -j image.jpg > dump.json.
- Проверьте согласованность: DateTimeOriginal совпадает с заявленным временем? GPS соответствует заявленному месту? Серийный номер камеры совпадает с известным?
- Посмотрите Software и ProcessingSoftware — есть ли следы редакторов, несовместимых с заявленной историей.
- Сравните миниатюру с основным кадром.
- Проверьте структуру файла: exiftool -struct image.jpg или jhead -v image.jpg — ищите признаки повторного сохранения (несколько APP1 маркеров, нестандартные сегменты).
- Результат — вероятностная оценка, а не доказательство. Для форензики нужны специализированные инструменты (Error Level Analysis, noise consistency, PRNU).
- Сгенерируйте CSV-отчёт: exiftool -r -csv -gpslatitude -gpslongitude -datetimeoriginal -make -model -serialnumber -ownername -copyright -software /archive > audit.csv.
- Откройте в табличном процессоре, отфильтруйте непустые GPS, серийные номера, имена владельцев.
- Для проблемных файлов решите: очистить на месте (exiftool -overwrite_original -gps:all= -serialnumber= …), переместить в защищённую зону или удалить.
- Зафиксируйте политику: новые импорты проходят через очистку автоматически (скрипт в папке входящих).
- HEIC/HEIF и RAW-форматы: не все инструменты читают их нативно. ExifTool поддерживает большинство, но для HEIC на Windows может потребоваться установка кодеков (HEIF Image Extensions). libheif / heif-convert помогают конвертировать для просмотра.
- MakerNotes: проприетарны, частично зашифрованы (Canon, Nikon, Sony). ExifTool знает многие форматы, но не все. Полный разбор требует специфических библиотек.
- Видео (MP4, MOV): метаданные лежат в атомах (QuickTime), не в EXIF. ExifTool читает их, но GUI-инструменты часто игнорируют видео. Проверяйте отдельно: exiftool -ee -gps:all video.mp4 (флаг -ee для встроенных потоков).
- Файловые системы и облака: удаление EXIF из файла не убирает метаданные, уже проиндексированные Google Photos, Яндекс.Диском, iCloud, Windows Search. Там нужны отдельные настройки приватности.
- Стеганография и скрытые данные: EXIF — только один контейнер. Данные могут быть зашиты в LSB пикселей, в ICC-профиле, в комментариях PNG, в неиспользуемых секциях JPEG. Локальный EXIF-чекер этого не найдёт.
Проверка нужна перед публикацией, передачей файла контрагенту, архивацией или продажей техники. Даже если вы намеренно удалили GPS в настройках камеры, некоторые приложения (мессенджеры, облачные синхронизаторы, редакторы) могут записать свои теги или восстановить координаты из кэша.
Инструменты командной строки: максимальный контроль и автоматизация
ExifTool — де-факто стандарт
ExifTool (Perl-скрипт, распространяется как отдельный исполняемый файл для Windows, macOS, Linux) поддерживает более 200 форматов и тысячи тегов. Работает рекурсивно с директориями, умеет читать, записывать, копировать и удалять метаданные.
Базовые сценарии:
# Полный дамп всех тегов (включая MakerNotes и дубликаты)
exiftool -a -u -g1 image.jpg
# Только GPS-блок в читаемом виде
exiftool -gps:all -n image.jpg
# Все временные метки с разницей между ними
exiftool -time:all -G1 -a image.jpg
# Проверка миниатюры: извлечение и сравнение размера
exiftool -b -ThumbnailImage image.jpg > thumb.jpg
exiftool -ThumbnailImage image.jpg
Ключевые флаги: -a (показать дублирующиеся теги), -u (неизвестные теги), -g1 (группировка по семейству), -n (числовые значения вместо форматированных), -j (JSON-вывод для парсинга), -csv (таблица для Excel).
Удаление всех метаданных кроме ориентации и цвета:
exiftool -all= -tagsfromfile @ -Orientation -ColorSpace image.jpg
Пакетная обработка с отчётом:
exiftool -r -csv -gps:all -datetimeoriginal -make -model -serialnumber /path/to/photos > report.csv
Exiv2 — быстрый C++ альтернативный вариант
Exiv2 легче, быстрее на больших массивах и не требует Perl. Хорош для встраивания в скрипты и контейнеры.
# Чтение всех тегов
exiv2 -pa image.jpg
# Только Exif, Iptc, XMP
exiv2 -p e -p i -p x image.jpg
# Удаление всех метаданных
exiv2 rm image.jpg
# Удаление только GPS
exiv2 -M «del Exif.GPSInfo» image.jpg
ImageMagick — когда нужен одновременный доступ к пикселям и метаданным
ImageMagick (команда identify и magick в v7) читает EXIF как свойства изображения.
# Все профили и свойства
identify -verbose image.jpg
# Конкретные теги
identify -format «%[EXIF:DateTimeOriginal] %[EXIF:GPSLatitude] %[EXIF:GPSLongitude]\n» image.jpg
# Удаление профилей при конвертации
magick image.jpg -strip clean.jpg
Флаг -strip удаляет все профили (EXIF, ICC, IPTC, XMP, миниатюру). Для селективного сохранения используйте -define profile:skip=ICC и аналогичные.
GUI-инструменты: визуальный анализ без терминала
| Программа | Платформы | Особенности | Подходит для |
|---|---|---|---|
| XnView MP | Win, Linux, macOS | Панель метаданных с вкладками EXIF/IPTC/XMP, пакетное редактирование, просмотр миниатюры, экспорт в CSV | Массовый осмотр, быстрая проверка папок |
| digiKam | Linux, Win, macOS | Продвинутый редактор метаданных, геотегинг на карте, поиск по тегам, работа с базой данных SQLite | Фотографы, каталогизация, научная работа |
| ExifToolGUI / pyExifToolGUI | Win, Linux | Обёртка над ExifTool, табличный вид, фильтры, пресеты удаления | Требуют установленного ExifTool |
| PhotoME | Windows | Детальное дерево тегов с описаниями, подсветка изменённых полей, сравнение двух файлов | Глубокий разбор MakerNotes |
| ExifCleaner | Win, Linux, macOS | Минималистичный drag-and-drop для очистки, открытый код (Electron + ExifTool) | Быстрое удаление перед отправкой |
В XnView MP: View → Information → Metadata или Ctrl+I. Вкладка «EXIF» показывает сгруппированные теги, «GPS» — координаты с ссылкой на OpenStreetMap, «Thumbnail» — встроенное превью. Контекстное меню → «Edit metadata» → «Remove metadata» позволяет выбрать, что стирать.
В digiKam: правый клик по фото → «Edit Metadata» (F4). Вкладка «EXIF» с раскрывающимися группами. Кнопка «Remove» с чекбоксами для каждого блока. Есть пакетный режим: Item → Batch Queue Manager → добавить операцию «Edit Metadata».
Скриптовые подходы: Python, PowerShell, Bash
Python: Pillow, piexif, exifread
Для встраивания в пайплайны обработки изображений.
# pip install pillow piexif exifread
from PIL import Image
import piexif
import exifread
# Чтение через Pillow (базовые теги)
img = Image.open(«photo.jpg»)
exif = img.getexif()
if exif:
for tag_id, value in exif.items():
tag = Image.ExifTags.TAGS.get(tag_id, tag_id)
print(f»{tag}: {value}»)
# Полный разбор через exifread (включая MakerNotes)
with open(«photo.jpg», «rb») as f:
tags = exifread.process_file(f, details=False)
for k, v in tags.items():
print(f»{k}: {v}»)
# Удаление EXIF через piexif
piexif.remove(«photo.jpg»)
# Или селективно:
exif_dict = piexif.load(«photo.jpg»)
exif_dict[«GPS»] = {}
exif_dict[«0th»].pop(piexif.ImageIFD.Make, None)
piexif.insert(piexif.dump(exif_dict), «photo.jpg»)
PowerShell (Windows без сторонних утилит)
Нативный способ через System.Drawing или Windows.Storage.FileProperties (UWP). Пример с Shell.Application для быстрого чтения:
$shell = New-Object -ComObject Shell.Application
$folder = $shell.Namespace(«C:\Photos»)
$file = $folder.ParseName(«image.jpg»)
# Индексы свойств зависят от локали, надежнее перебирать
for ($i = 0; $i -lt 300; $i++) {
$name = $folder.GetDetailsOf($folder.Items, $i)
$value = $folder.GetDetailsOf($file, $i)
if ($value) { Write-Host «$i: $name = $value» }
}
Для серьёзной работы в PowerShell удобнее вызвать exiftool.exe и парсить JSON:
$json = exiftool -j -g1 «C:\Photos\*.jpg» | ConvertFrom-Json
$json | Where-Object { $_.GPSLatitude -or $_.GPSLongitude } | Select-Object SourceFile, GPSLatitude, GPSLongitude, DateTimeOriginal
Bash-однострочники для Linux/macOS
# Рекурсивный поиск файлов с GPS
find . -type f \( -iname «*.jpg» -o -iname «*.jpeg» -o -iname «*.heic» \) -exec exiftool -q -q -n -gpslatitude -gpslongitude {} \; -print
# Статистика по камерам
exiftool -r -csv -make -model -serialnumber /photos | csvcut -c Make,Model,SerialNumber | sort | uniq -c | sort -rn
# Проверка миниатюр: найти файлы, где превью отличается от основного кадра
exiftool -r -ThumbnailImage -b -w %d%f_thumb.jpg /photos
Что проверять в первую очередь: чек-лиск приоритетов
Типичные ошибки и как их избежать
Сценарии: как действовать в типичных ситуациях
Сценарий 1: Подготовка фото к публикации в открытую сеть
Сценарий 2: Верификация подлинности полученного изображения
Сценарий 3: Массовый аудит архива на утечки персональных данных
Ограничения локального подхода
Практический следующий шаг
Начните с установки ExifTool (один исполняемый файл, без зависимостей) и прогоните тестовую папку:
exiftool -r -csv -gps:all -datetimeoriginal -make -model -serialnumber -software -thumbnailimage test_folder/ > audit.csv
Откройте audit.csv. Если там есть данные, которых вы не ожидали — решите, чистить ли их сейчас или оставить для архива. Для разовой очистки перед отправкой используйте ExifCleaner (drag-and-drop) или команду exiftool -all= -overwrite_original file.jpg. Для постоянной работы добавьте вызов ExifTool в скрипт импорта фото с камеры/телефона.
Главный принцип: метаданные — это часть атакуемой поверхности файла. Проверяйте их локально, чистите целенаправленно, храните оригиналы отдельно от публикуемых копий.
Материал носит информационный характер. Удаление EXIF-данных не гарантирует полную анонимность: идентификацию могут позволить уникальные шумы сенсора (PRNU), артефакты оптики, водяные знаки, контекст публикации и корреляция с другими источниками. При высоких рисках (журналистика, защита источников, личное безопасность) консультируйтесь со специалистом по цифровой безопасности и форензике изображений.
FAQ
Можно ли проверить EXIF на телефоне без загрузки в облако?
Да. На Android: приложения Photo Exif Editor, ExifTool (порт), Scrambled Exif (для удаления перед шарингом). На iOS: Metapho, Exif Viewer by Fluntro, HashPhotos — все работают офлайн, доступ к медиатеке даётся через системный пикер. Перед установкой проверяйте разрешения: приложению не нужен интернет для чтения локальных файлов.
Почему после очистки EXIF файл стал меньше всего на пару килобайт?
EXIF-блок обычно занимает 2–20 КБ. Основной вес — в JPEG-данных. Если файл уменьшился значительно сильнее — возможно, вы пересохранили его с другой качеством (quality/subsampling). Используйте exiftool -all= -overwrite_original (без перекодирования) или jpegtran -copy none -optimize для lossless-оптимизации.
Как проверить, что миниатюра соответствует основному изображению?
Извлеките миниатюру: exiftool -b -ThumbnailImage image.jpg > thumb.jpg. Откройте оба файла рядом. Если на миниатюре другой кадр, обрезанная версия, есть объекты, удалённые из основного — файл редактировался без обновления превью. Это частый маркер манипуляции.
Нужно ли удалять EXIF из скриншотов и сканов?
Скриншоты обычно не содержат GPS и камерных тегов, но могут иметь метку времени, имя пользователя, DPI, профиль цвета, название ОС/программы (Software). Сканы — модель сканера, серийный номер, настройки сканирования, иногда GPS, если МФУ сетевой. Проверьте: exiftool screenshot.png — если есть лишнее, очистите -all=.
Как автоматизировать очистку при загрузке фото с камеры на Linux?
Напишите udev-правило или systemd-сервис, который при монтировании SD-карты запускает скрипт: копирует файлы в ~/Photos/Incoming, прогоняет exiftool -all= -tagsfromfile @ -Orientation -ColorSpace -overwrite_original, затем перемещает в итоговую структуру по дате (exiftool ‘-Directory
