Как отличить изображения, сжатые Google Фото, от оригинала с использованием метаданных?

Я использовал Google Takeout для загрузки всех своих фотографий из Google Фото и понял, что Google сжимает эти изображения в 2-3 раза, чтобы предоставить мне бесплатное хранилище. Это здорово, но многие мои изображения хранятся в исходном размере. jpgК сожалению, с расширением сохраняются как «сжатые Google», так и изображения «исходного качества» . Мне интересно, как понять, что есть что? Добавляет ли Google теги метаданных, чтобы определить, были ли они повторно сжаты?

Ответы (2)

Google добавляет некоторые теги к изображениям, которые он повторно сжимает , включая изображения, сохраненные как «Высокое качество», разрешение которых может быть уменьшено до 16 Мп или меньше. Изображения, сохраненные с качеством «Исходное», не изменяются. В настоящее время добавлены или изменены следующие теги:

  • XMPToolkit = ядро ​​XMP 5.5.0
  • ImageUniqueID

Следующая команда может отображать изображения, которые были изменены Google:

exiftool -if '($XMPToolkit =~ /^XMP\ Core\ [\.\d]+$/) \
   and ($ImageUniqueID)' -s2 -q -FilePath -ext jpg .

Некоторые предостережения

  • Команда может включать изображения, не измененные Google. Другие программы могут использовать те же или похожие строки XMPToolkit, что и Google, особенно если они используют ту же библиотеку записи изображений, что и Google. Например, GIMP использует «XMP Core 4.4.0-Exiv2». Photoshop использует «Adobe XMP Core 5.3-c011 66.145661, 06.02.2012-14:56:27» (как отмечает StarGeek ).

  • Команда может пропустить изображения, измененные Google. Это зависит от того, как Google изменил свою обработку изображений за эти годы. Например, неизвестно (мне), когда Google начал использовать ImageUniqueIDтег. Поэтому для некоторых изображений он может не быть установлен.

  • Есть и другие теги, которые могут быть изменены Google, но их нельзя проверить, потому что они есть на многих изображениях в формате JPEG, в том числе прямо с моей камеры (FujiFilm X-T20):

    • JPEGДайджест
    • YCbCrSubSampling

Другие варианты

Вы также можете догадаться , были ли изменены изображения, сравнив размеры файлов или используя такие инструменты, как jpegjudge.

В образцах изображений, которые я здесь рассматривал, XMPToolKitтег имел значение XMP Core 5.5.0. Вы можете перечислить только эти изображения с помощью этой команды: exiftool -if "$XMPToolkit eq 'XMP Core 5.5.0'" -filename -ext jpg .(Обратные двойные/одинарные кавычки, если на Linux/Mac)
Хороший вопрос, его можно было бы изменить, $XMPToolkit=~/^XMP Core/чтобы игнорировать номера версий.
@StarGeek Почему недостаточно просто обнаружить наличие тега?
Потому что многие программы, такие как Lightroom и Photoshop, записывают туда свои собственные данные инструментария. Один пример, который я нашел, был Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27в этой области. Это можно использовать для фильтрации файлов, которые определенно не были повторно сжаты.
Используя образцы здесь, я смог выяснить с помощью exiftool, что JPEGDigestтакже YCbCrSubSamplingбудет изменено повторным сжатием. Это не гарантирует, что файл был повторно сжат, но может использоваться для фильтрации файлов, которые не были повторно сжаты.
Были ли у вас некоторые, которые были определенно повторно сжаты, но имели значения, которые не были YCbCr4:2:0 (2 2)и Unknownне начинались таким образом? Вполне возможно, моя тестовая выборка состояла только из трех изображений, которые были в статье HuffingtonPost.
@StarGeek Я создал собственное тестовое изображение, загрузив и повторно загрузив его из Google Фото. Мое исходное изображение также имеет JPEGDigest = Unknown (...) ; Это прямо с камеры JPEG. Выполняя сравнение на exiftoolвыходе, Google также добавляетImageUniqueID
@ xiota Оооо, это хорошо, чтобы проверить. Я не помню очень много программ, использующих это. Большинство используют теги XMP для уникальных идентификаторов.

Если вы знаете типичный размер jpeg с вашей камеры, вы сможете определить, к каким изображениям было добавлено дополнительное сжатие, просто по размеру их файла.