- Эксперимент: проверяем, что интересного можно узнать из метаданных фотографий в Интернете
- Эксперименты
- Так и запишем
- За кадром — самое интересное
- Рекомендации
- КАК И ДЛЯ ЧЕГО НУЖНО УДАЛЯТЬ МЕТАДАННЫЕ ИЗ ФОТОГРАФИЙ ПЕРЕД ЗАГРУЗКОЙ В ИНТЕРНЕТ
- Как считывать и удалять метаданные из ваших фотографий с помощью Python
- Немного очевидного для тех кто не в теме — метаданные в фото
- Модуль exif
- Загрузка фотографий и проверка их на наличие данных EXIF
- Какие метаданные EXIF доступны на каждой фотографии?
- Члены класса Image exif, не являющиеся тегами EXIF
- Получение основной информации о фотографиях
- Марка и модель устройства, на котором было сделано фото.
- Дополнительная информация об устройствах
- Дата и время, когда была сделана фотография
- Определение места, где была сделана фотография
- Получение GPS-координат фотографии
- Форматирование широты и долготы
- Отображение местоположения фотографий на карте
- Отображение города, региона и страны, где был сделан снимок
- Другая полезная информация о датчиках
- В каком направлении была обращена камера?
- На какой высоте был сделан снимок?
- Двигался ли фотограф?
- Редактирование EXIF данных и их сохранение
- Редактирование координат фотографии
- Заполнение неиспользуемых тегов EXIF
- Сохранение фото с обновленными данными
- Удаление данных EXIF и сохранение «очищенной» фотографии
- Практические и технические соображения
- Причины удаления метаданных EXIF
- Причины редактирования или добавления метаданных EXIF
- Другие вещи, которые следует учитывать
Многие слышали, что изображения с наших телефонов и фотоаппаратов могут хранить важную информацию. Прочтите эту статью, чтобы узнать, где ее посмотреть.
Файл exif — это стандарт, появившийся с появлением цифровых фотографий. Это метаданные, описывающие условия создания фото, они могут содержать комментарии, географические данные и даже авторство. Этот небольшой информационный файл может использоваться как людьми, так и программами. Например, exif часто отображается в редакторах изображений или в окне настроек печати.
Если вам нужны более конкретные примеры данных, хранимых exif, вот они:
- Марка видео или камеры, использованной для захвата изображения;
- Использование / неиспользование вспышки при фотосъемке;
- Подробная информация о размере изображения: ширина в пикселях, высота, количество пикселей и т.д.;
- Информация о времени съемки: год, месяц, часы, минуты;
- Место жительства фотографа на момент съемки;
- Ориентация камеры (вертикальная / горизонтальная);
- Имя и фамилия владельца фотографии;
- Другая техническая информация: тип баланса белого, фокусное расстояние, светочувствительность, размер матрицы и многое другое.
Обращая внимание на этот список, можно с уверенностью сказать, что эти данные могут быть очень полезны в некоторых ситуациях. Особенно в тех случаях, когда у вас есть дополнительная информация о том, кто сделал снимок. К сожалению, этот список не всегда исчерпывающий. Иногда при открытии файла exif мы видим только основную информацию: дату создания файла, тип, имя и т.д.
Файл фотографии часто содержит информацию об обстоятельствах съемки, включая геотеги. Что происходит с этой информацией, когда фотография попадает в Интернет?
Эксперимент: проверяем, что интересного можно узнать из метаданных фотографий в Интернете
Файл фотографии часто содержит информацию об обстоятельствах съемки, включая геотеги. Что происходит с этой информацией, когда фотография попадает в Интернет?
Устаревший обычай подписывать фотографии в бумажных альбомах кардинально изменился. В настоящее время больше нет необходимости предоставлять картинку с комментарием самостоятельно: подойдет камера (особенно смартфон или планшет), приложение, в котором вы ее обработали, а также интернет-сервис, на который вы загрузили свою фотографию это для вас.
Такая подпись по-своему не менее информативна, чем «Бабушкин Новый год 2016». Помимо всех утомительных технических параметров кадра, таких как фокусное расстояние и режим вспышки, есть возможность записать модель и серийный номер камеры, дату съемки и, самое главное, географические координаты места где это было сделано фото в файле. Кроме того, служба, в которую вы загружаете фотографию, также запомнит ваш IP-адрес.
В общем, совсем не надо быть параноиком, чтобы волноваться: ведь по всем этим данным довольно легко выследить себя и узнать, например, какие еще фотографии вы сделали, а потом найти среди них, например, компрометирующие.
Поиск метаданных в файлах фотографий — одно из звеньев доксинга (от «docs»), которое уже стало очень популярной практикой сбора информации о человеке в источниках Интернета для различных целей.
Одним из основных «сборщиков» метаданных является блок EXIF, добавляемый в графические файлы. Стандарт Exchangeable Image File Format был разработан Японской ассоциацией электроники и ИТ-индустрии JEITA, и его первая версия была опубликована в 1995 году. EXIF предназначен для форматов изображений JPEG и TIFF. Другие популярные форматы файлов, такие как PNG и GIF, также могут содержать аналогичные метаданные, в первую очередь стандарт XMP, разработанный Adobe. Кроме того, производители камер используют собственные форматы метаданных, которые частично дублируют EXIF.
«Забытые» метаданные в файлах с фотографиями повторно передаются авторам или актерам фотографий. Один из самых ярких примеров — арест Джона Макафи в Гватемале в 2012 году. Скрываясь от расследования убийства своего соседа, Макафи дал интервью Vice, проиллюстрированное фотографией. Метаданные этого изображения были переданы Джону Макафи — геотег, найденный в файле изображения, помог правоохранительным органам найти и арестовать беглеца.
Давайте посмотрим, как современное программное обеспечение для обработки фотографий и различные сетевые службы обрабатывают метаданные в файлах изображений: удаляют ли они потенциально опасные теги или оставляют их в файле?
Эксперименты
Для начала давайте подумаем, какие сценарии возможны для приключений в веб-фотографии и на каких стадиях может возникнуть угроза конфиденциальности:
- Отправляйте фотографии по электронной почте или загружайте их в облачное хранилище, например на Google Диск или Dropbox. В этом случае файл останется без изменений, и пользователи, с которыми вы делитесь этими файлами, увидят все метаданные, если захотят.
- Загружайте фото в социальные сети и фотохостинги. В этом случае, вероятно, будут выполнены следующие условия, представляющие угрозу конфиденциальности: а) вы вообще не знаете метаданные файла; б) вы даже не знаете, что ваш сервис не удаляет их.
- Сфотографируйте старинную вазу или мало использованный велосипед и разместите объявление о продаже на веб-сайте барахолки. Так что все как в пункте 2. В одном из интернет-обсуждений метаданных EXIF была упомянута история в духе «мой друг умер за это». То есть друг, конечно, жив, но, по словам рассказчика, хороший байк все же украл друг — сразу после того, как в Интернете было размещено объявление о его продаже.
Что ж, пора начать экспериментировать — ознакомьтесь с популярными интернет-сервисами, чтобы узнать, что они делают с EXIF. Для этого мы использовали плагин для браузера Firefox — Exif Viewer 2.00. Плагин отображает метаданные для изображений на веб-страницах и локальных компьютерах, интегрируется с картографическими сервисами для просмотра мест съемки и отображает встроенные эскизы.
Кстати, вы можете самостоятельно поэкспериментировать с теми сервисами, которые у нас еще нет — это предельно просто и довольно увлекательно.
Короткое путешествие от фотографии в Интернете до места в реальном мире
Вот что показал наш осмотр:
- Facebook, Twitter, ВКонтакте: удаляются метаданные с фотографий;
- Google+ — не удаляет;
- Instagram: удалить;
- Flickr, Google Фото, Tumblr — не удаляются;
- eBay, Craigslist — удалены;
- ЦИАН — не удаляет.
Кстати, используя геотеги на ЦИАН, можно подсчитать недобросовестных агентов по недвижимости, размещающих в объявлении фотографии других квартир (конечно, если они сами не удалили EXIF)
Службы, которые не удаляют метаданные, обычно имеют настройку конфиденциальности, чтобы отключить их отображение. Но дело в дисплее — сервис еще может сохранять эти данные отдельно. И эта тема заслуживает отдельного разговора.
Так и запишем
Например, это именно то, что делает Facebook. Убедиться в этом очень просто: достаточно воспользоваться стандартной функцией загрузки копии данных. После выполнения простой процедуры вы получаете архив, содержащий, среди прочего, фотографии, загруженные в социальную сеть, вместе с аннотацией в виде файла HTML. Эта аннотация включает координаты места съемки и IP-адрес, с которого были отправлены фотографии.
Вот как выглядят метаданные фото в архиве пользовательских данных Facebook
Список пользовательских данных, хранящихся в Facebook, доступен в справочной системе социальной сети.
Появившаяся в сети инструкция, описывающая процедуру запроса пользовательских данных из Facebook, позволяет взглянуть на взаимодействие правоохранительных органов и социальных сетей с необычной точки зрения. Сотрудник департамента шерифа Сакраменто указан как автор документа, размещенного на netzpolitik.org. Это вторая версия руководства: обновление было необходимо из-за модификации механизма хранения пользовательских данных, сделанной Facebook, замечает сам документ.
Подробная информация о взаимодействии государственных органов и онлайн-сервисов в отношении персональных данных выходит за рамки данного уведомления. Наша задача — просто предупредить вас о том, что социальные сети хранят гораздо больше данных о фотографиях, чем может показаться, и при определенных обстоятельствах могут делиться ими с другими людьми.
За кадром — самое интересное
Кстати, в метаданных хранится не только текстовая информация, но и эскиз изображения, в котором она содержится. И иногда с ними могут возникнуть проблемы.
Читая историю EXIF, мы натолкнулись на экстраординарный случай. В 2003 году американская телеведущая Кэтрин Шварц разместила в блоге свои, казалось бы, безобидные фото. Однако метаданные этих файлов содержали эскизы исходных фотографий, показывающих полное изображение до процедуры кадрирования. И да, на двух из них Шварц появился обнаженным.
Но в конце концов, с тех пор прошло более десяти лет, разработчики, вероятно, уже столкнулись с очевидной угрозой конфиденциальности, не так ли? Что ж, не помешает проверить, на всякий случай.
После тестирования Adobe Photoshop Express, GIMP, Windows Paint, Microsoft Office Picture Manager, IrfanView и XnView мы убедились, что при редактировании изображения миниатюра обновляется.
Еще одним испытуемым была последняя версия редактора Corel PHOTO-PAINT X8. Вдруг выяснилось: при сохранении файла JPG миниатюра не обновляется, отображается пусть пусть и в уменьшенном виде, а исходное изображение!
В PHOTO-PAINT есть функция для подготовки изображения для веб-публикации (Экспорт для Интернета). Мы подумали, что, может быть, это хотя бы очистит метаданные, но нет.
В целом опыт Кэтрин Шварц можно повторить и в наше время. Для справки: Corel PHOTO-PAINT позиционируется как «продвинутый фоторедактор» и «профессиональное приложение».
Чтобы исключить возможность ошибки в самом файле, из-за которой редактор не может обновить миниатюру, мы повторили опыт, в частности, с файлами зеркальной камеры, смартфона и образцового графического файла с пингвинами Windows 7.
Слева — значок файла, который проводник Windows берет из метаданных, справа — превью файла. Файл только что был создан, поэтому о кешировании значков из ОС не может быть и речи, и Exif Viewer подтвердил подозрения
Рекомендации
Чтобы не «включить» вместе с фотографиями что-то лишнее, не предназначенное для посторонних глаз, мы предлагаем подборку льготных советов, в общем.
- Отключить сохранение местоположения на устройстве (только для камеры или для всех приложений одновременно).
- Удалите метаданные из файлов перед их публикацией в Интернете. Например, XnView бесплатен для личного некоммерческого использования. Но встроенный в Windows механизм «Очистить свойства и личную информацию» (вызываемый в окне свойств файла на вкладке «Подробности») фактически оставляет как миниатюру, так и блоки EXIF.
- Вы также можете удалить метаданные с фотографий перед их загрузкой в Интернет прямо на мобильное устройство. Например, приложения для iOS, Android и Windows Phone.
- В настройках конфиденциальности сетевых сервисов запретите им сохранять метаданные фотографий.
Самый хардкорный для тех, кому действительно есть что терять: не отправляйте в Интернет фотографии и данные, которые могут быть полезны вашим головорезам. То есть не размещайте ничего, что при определенных обстоятельствах может быть использовано против вас.
Цитировать сообщение MissKcu Подробнее В книгу цитат или в сообщество! Как и почему нужно удалять метаданные с фотографий перед их загрузкой в Интернет. Они содержат информацию не только о том, когда они были сделаны…
КАК И ДЛЯ ЧЕГО НУЖНО УДАЛЯТЬ МЕТАДАННЫЕ ИЗ ФОТОГРАФИЙ ПЕРЕД ЗАГРУЗКОЙ В ИНТЕРНЕТ
Как и зачем удалять метаданные с фотографий перед их загрузкой в Интернет
Они содержат информацию не только о том, когда была сделана фотография, но также показывают ваши данные GPS, которые можно использовать для расчета вашего адреса, если фотография была сделана дома.
Защитите свои личные данные. Загружайте свои фотографии в Интернет исключительно без метаданных
Windows поможет вам удалить данные Exif. Щелкните правой кнопкой мыши изображение, которым хотите поделиться в Интернете. Откройте в контекстном меню пункт «Свойства». На вкладке «Сведения» щелкните ссылку «Удалить сведения о владении и личной информации». Для этой операции могут потребоваться права администратора.
Вы также можете использовать утилиту Exif Tag Remover (скачать здесь). Его можно использовать для одновременного удаления метаданных с нескольких изображений. Запустите программу и нажмите «Добавить», перейдите к выбранным изображениям и загрузите их двойным щелчком.
Нажмите «Далее» и выберите, что программа должна делать: заменить исходные изображения на измененные («Перезаписать оригинал»), выбрать папку для измененных изображений или сохранить изображения после оригиналов с пометкой «чистые» в файле имя.
Нажав «Далее» еще раз, у вас будет возможность выбрать, какие метаданные следует удалить. Вы можете упростить себе задачу, поставив галочку напротив «Все поддерживается».
Готовые решения для 1С-Битрикс. Лучшие цены на шаблоны сайтов. Большой выбор бизнес-сайтов и интернет-магазинов на 1С-Битрикс.
Как считывать и удалять метаданные из ваших фотографий с помощью Python
Те, кто знаком с Python, могут делать поистине удивительные вещи, такие как создание картинок и игр и красивых карт, полнотекстовый поисковый движок и систему распознавания лиц. Мы применяем Python для довольно повседневных задач. Сегодня, особенно перед началом новых потоков курса Python по веб-разработке, разработчик Fullstack Python поделится с вами учебным пособием о том, как читать, добавлять и удалять метаданные EXIF с фотографий с помощью Python.
Немного очевидного для тех кто не в теме — метаданные в фото
Массовое распространение смартфонов (в основном ноутбуков, оснащенных датчиками и всегда подключенных к сети) имеет два важных последствия — последствия для конфиденциальности и последствия для безопасности — и они еще не полностью поняты:
У многих есть фотоаппарат, который обычно находится под рукой.
По умолчанию фотографии, сделанные с помощью камеры, могут раскрывать конфиденциальную информацию, о которой многие пользователи не подозревают.
Помимо данных изображения, фотографии, сделанные с помощью смартфонов и современных цифровых фотоаппаратов, содержат метаданные, которые являются дополнительной информацией о фотографии. Эти метаданные хранятся в EXIF (сокращенно от EXchangeable Image File format), который является развивающимся стандартом для информации, добавляемой к цифровым изображениям и аудиозаписям.
На фотографиях EXIF может включать такую информацию, как:
Размер пикселей и плотность фотографий.
Марка и модель устройства, на котором был сделан снимок.
Зум, диафрагма, вспышка и другие настройки камеры при фотосъемке.
Ориентация устройства во время фотосъемки.
В каком направлении была обращена камера.
Высота, на которой была сделана фотография.
Эти метаданные полезны для сортировки, каталогизации и поиска фотографий, поэтому был определен стандарт EXIF. Однако при этом возникают проблемы с конфиденциальностью и безопасностью, которые многие пользователи не принимают во внимание.
Одним из первых предупреждений об EXIF является инцидент с конфиденциальностью в 2012 году, связанный с основателем антивируса Джоном Макафи. Это было захватывающее время в жизни Макафи, поскольку он избегал правоохранительных органов, продолжая давать репортерам эксклюзивные и пользующиеся большим спросом интервью. Репортер, которому посчастливилось дать интервью, решил продемонстрировать свою удачу, опубликовав фотографию McAfee, не удаляя предварительно данные EXIF. Оба показали, где находится Макафи, и привели к его аресту.
Вам, вероятно, известны недавние истории о том, что правоохранительные органы арестовывают подозреваемых с использованием фотографий, размещенных в социальных сетях, потому что подозреваемые не приняли мер предосторожности и не «удалили» свои данные EXIF в процессе загрузки.
Я подозреваю, что как разработчик безопасности вы задаете себе следующие вопросы:
Как я могу программно обнаружить и прочитать метаданные EXIF с фотографии?
Как я могу программно изменить, добавить или удалить метаданные EXIF?
Если на вашем компьютере установлен Python 3.6 или более поздней версии, вы можете узнать об этом, следуя приведенным ниже инструкциям. Они охватывают пару пакетов Python, которые вы можете включать в свои приложения для извлечения, добавления, редактирования или удаления данных EXIF с фотографий. Попутно вы не только примените свои навыки программирования, но и поработаете детективом!
Модуль exif
Существует ряд модулей Python, которые могут получить доступ к данным EXIF в цифровых фотографиях. В этой статье речь пойдет о exif. Его API настолько питонический, что кажется частью языка, а не модулем.
Чтобы установить exif, используйте pip, набрав в командной строке следующее:
Если вы получаете сообщение об ошибке при вводе этой команды, попробуйте вместо этого использовать pip3 install exif. Pip3 — это версия pip, менеджера пакетов Python, специфичная для Python 3.
Если у вас нет кода Python 2, но вам нужно использовать pip3 для установки пакетов Python, вам следует подумать об обновлении Python.
Загрузка фотографий и проверка их на наличие данных EXIF
Тестируем exif в действии. Рассмотрим эти две фотографии, palmtree1.jpg и palmtree2.jpg:
Предположим, вам задают следующие вопросы:
Эти фотографии были сделаны на одном устройстве или на разных?
Какое фото было сделано первым?
Где были сделаны эти фотографии?
Чтобы ответить на эти вопросы, мы загрузим данные с этих фотографий в объекты exif-Image, а затем будем использовать эти объекты для проверки метаданных EXIF:
Код открывает каждый файл только для чтения. Считывает данные файла в двоичном формате в объект файла, который затем используется для создания экземпляра объекта exif-Image. Наконец, он помещает объекты Image в массив, чтобы мы могли перебирать их, выполняя одни и те же операции с метаданными EXIF каждой фотографии.
Сделаем наш первый шаг: убедитесь, что ваши фотографии содержат данные EXIF. Мы сделаем это, проверив свойство has_exif каждого объекта Image. Для каждого изображения, содержащего данные EXIF, мы будем использовать свойство изображения exif_version для отображения версии EXIF:
При запуске этот код дает следующие результаты:
Теперь мы знаем, что обе фотографии содержат информацию EXIF и используют разные версии EXIF. Скорее всего, эти фото сделаны разными фотоаппаратами.
Какие метаданные EXIF доступны на каждой фотографии?
Думайте о EXIF как о структуре данных «ключ-значение», подобной словарю Python. Пары ключ / значение EXIF называются тегами, и каждый тег может содержать строку или числовое значение. Текущий стандарт EXIF (версия 2.32) имеет десятки тегов, и каждый, от производителей смартфонов и камер до фотографов, может добавлять свои собственные теги.
Вот полный список тегов EXIF, которые вы, вероятно, найдете на цифровых фотографиях. Кроме того, есть теги, которые не являются частью стандарта EXIF, но предоставляются рядом устройств или программного обеспечения.
EXIF — один из тех неформальных форматов, где производители самостоятельно выбирают, какие функции они будут реализовывать. Это означает, что фотографии, сделанные разными камерами и смартфонами, будут иметь разные наборы тегов EXIF.
Как правило, вы можете ожидать, что смартфоны будут включать ряд тегов EXIF, обычно используемых в фотографиях, включая марку и модель смартфона, дату и время, когда была сделана фотография, место, где она была сделана, общая информация и камера настройки.
Учитывая различия между устройствами и наличие инструментов для редактирования данных EXIF, первое, что нужно сделать при работе с данными фотографий EXIF, — это посмотреть, какие теги доступны.
Объекты изображений, предоставляемые модулем exif, предоставляют теги EXIF как свойство этого объекта. Это означает, что вы можете использовать встроенную функцию Python dir () для изображения, чтобы увидеть, какие теги EXIF у него есть.
Следующий код показывает список тегов для каждого объекта Image в нашем списке изображений:
Вы увидите следующий результат:
Как видите, хотя оба объекта Image имеют много общих тегов, изображение 1 содержит немного больше, чем изображение 0. Это означает, что изображение 1 имеет немного больше тегов EXIF, чем изображение 0. Это сильный индикатор того, что изображение 0 и изображение 1 были сняты на разных устройствах.
вы можете использовать стандартный метод set () для определения общих элементов изображения 0 и изображения 1:
Запуск этого кода дает следующий результат:
Если вы просмотрели теги EXIF в документации (стандартный список тегов EXIF или расширенный список), вы могли заметить, что имена тегов EXIF находятся в PascalCase, а свойства EXIF - в exif объекты -Изображение находится в snake_case. Это связано с тем, что авторы модуля exif стремятся следовать руководству по стилю Python и разработали Image для преобразования имен тегов EXIF в имена свойств Python.
Члены класса Image exif, не являющиеся тегами EXIF
Большинство членов класса любого экземпляра изображения будут свойствами, соответствующими тегам EXIF в изображении. Однако есть несколько участников для управления метаданными EXIF. Они перечислены в следующей таблице:
Члены класса
Удаляет из изображения тег EXIF, указанный в строковом атрибуте.
Удаляет все теги EXIF из изображения.
Возвращает значение тега EXIF, указанное строковым атрибутом. Если тег недоступен или содержит значение, он возвращает значение, указанное в аргументе ключевого слова по умолчанию.
Возвращает данные текущего изображения, отформатированные для записи в двоичный файл.
Возвращает двоичные данные для миниатюрного изображения.
Логическое значение, которое возвращает True, если изображение в настоящее время содержит метаданные EXIF.
Устанавливает значение тега EXIF, заданное строковым атрибутом. Если тег недоступен или содержит значение, он возвращает значение, указанное в аргументе ключевого слова по умолчанию.
В этой статье мы рассмотрим большинство из этих свойств и методов.
Получение основной информации о фотографиях
Ответим на первый вопрос об этих фотографиях. Были ли они сняты на одном устройстве или на разных устройствах? У нас уже есть основания полагать, что ответ отрицательный».
Марка и модель устройства, на котором было сделано фото.
Оба изображения имеют теги бренда и модели, поэтому давайте воспользуемся ими, чтобы определить, какие устройства использовались для создания этих изображений:
Это подтверждает, что фотографии были сделаны на разных устройствах, и теперь мы знаем подробности.
Дополнительная информация об устройствах
Мы собираем дополнительную информацию об устройствах, используемых для фотосъемки, то есть об их объективах и версиях операционной системы.
Не все устройства сообщают тип линзы в своих метаданных EXIF, поэтому мы будем использовать метод Image get (), который аналогичен методу get (), используемому в Python. Подобно методу get () в Python, метод get (), предоставляемый объектом exif Image, изящно обрабатывает случай, когда данный ключ не существует.
Следующий код использует get (), чтобы попытаться получить доступ к версиям объектива и операционной системы, используемым при съемке фотографий. Если конкретное свойство не существует, его значение будет отображаться как «Неизвестно»:
Обратите внимание, что телефон, используемый для захвата изображения 0 (Motorola One Hyper), не предоставляет свойства lens_make, lens_model, lens_specification или программного обеспечения. Если бы мы попытались получить к нему доступ напрямую (например, image.lens_make), результатом была бы ошибка. Метод get () позволил нам предоставить альтернативное значение для этих несуществующих свойств.
Дата и время, когда была сделана фотография
Следующий вопрос: какое фото было сделано первым?
Мы можем узнать это, посмотрев на свойство datetime_original каждой фотографии, которое указывает дату и время, когда фотография была сделана. Процессор смартфона достаточно быстр, чтобы записывать точную долю секунды при съемке фотографии, и это значение сохраняется в свойстве subsc_time_original.
Некоторые телефоны также регистрируют свойство offset_time, которое мы можем использовать для определения смещения даты и времени от UTC.
Следующий код показывает дату и время создания каждой фотографии. Если фотография включает данные о временном сдвиге, код также отобразит это значение:
Как видно из выходных данных, изображение 0 было снято первым, а изображение 1 было снято через 13 секунд.
Определение места, где была сделана фотография
В этом разделе мы рассмотрим доступ к координатам GPS в метаданных фотографии, форматирование этих координат и упрощение понимания этих координат путем размещения их на карте и преобразования их в названия страны, региона и города, где фото находится.
Получение GPS-координат фотографии
Формат EXIF определяет серию тегов, начинающихся с «gps», которые содержат полезную информацию о геолокации, включая широту и долготу, где была сделана фотография:
Обратите внимание, что свойства gps_latitude и gps_longitude возвращают широту и долготу в виде кортежа из трех значений:
Секунды (1/60 минуты или 1/3600 градусов).
Широта определяет угловое расстояние от экватора, которое может быть северным или южным. Свойство gps_latitude_ref указывает это направление, которое может быть N или S.
Долгота определяет угловое расстояние от меридиана, которое может быть восточным или западным. Свойство gps_longitude_ref указывает это направление: E или W.
Возможно, вы заметили небольшую разницу между координатами, показанными на фотографиях. Это ожидается: даже одно и то же устройство, расположенное в одном месте, будет сообщать немного разные координаты в разное время. Расхождение в координатах, сообщаемых телефонами, составляет порядка долей секунды, что составляет примерно 25 футов или 7,6 метра.
Форматирование широты и долготы
Давайте определим пару функций для форматирования информации о широте и долготе, возвращаемой Image, в стандартных форматах:
Градусы, минуты и секунды. В этом формате 0-я широта изображения будет записана как 28,0 ° 0,0 ‘1,56 «северной широты.
Десятичные градусы. В этом формате широта изображения 0 будет записана как 28,0004333333333334. Северные широты и восточные долготы представлены положительными значениями, а южные широты и западные долготы представлены отрицательными значениями.
Вот определения этих функций, а также код, который их использует:
Отображение местоположения фотографий на карте
Вы, вероятно, не знаете широту и долготу своего дома, даже если округлите до ближайшего градуса. Есть несколько простых способов преобразовать данные о местоположении EXIF в более понятные.
Один из способов — использовать встроенный в Python модуль веб-браузера, чтобы открывать новую вкладку браузера для каждой фотографии, используя десятичные координаты EXIF каждой фотографии в качестве параметров URL-адреса Google Maps. Мы создадим служебную функцию под названием draw_map_for_location (), которая выполняет следующие действия:
Когда вы запустите его, откроются две новые вкладки браузера, каждая с картой Google, показывающей, где была сделана соответствующая фотография.
Отображение города, региона и страны, где был сделан снимок
Другой способ просмотреть местоположение фотографии — использовать обратное геокодирование, то есть процесс преобразования географических координат в адрес или название места. Для этого нам нужно установить два модуля Python:
reverse_geocoder — это простой автономный обратный геокодер, который использует внутренние таблицы для преобразования набора координат в набор названий городов и штатов / провинций и кодов стран. Установите его, набрав pip install reverse_geocoder в командной строке.
pycountry — это утилита для поиска стран, которую мы будем использовать для преобразования кодов стран в их соответствующие имена. Установите его, набрав pip install pycountry в командной строке.
После установки вышеуказанных модулей используйте следующий код, чтобы преобразовать координаты фотографии во что-то более узнаваемое:
Код использует метод search () reverse_geocoder для преобразования десятичных значений широты и долготы каждой фотографии в набор следующей информации:
Название города, поселка или села.
Главный административный регион, который обычно представляет собой штат или провинцию.
Незначительный административный район, который обычно является округом или регионом.
Затем используйте метод get () pycountry для преобразования кода страны, предоставленного reverse_geocoder, в кортеж, содержащий соответствующие общие и официальные названия стран.
Другая полезная информация о датчиках
Как я уже упоминал в начале статьи, смартфоны оснащены сенсорами. К ним относятся магнитометр, барометр и акселерометр. Вместе с GPS эти датчики предоставляют дополнительную информацию, которая добавляется к метаданным EXIF каждой фотографии.
В каком направлении была обращена камера?
Магнитометр определяет магнитные поля, в том числе созданные Землей. Его основная цель — быть компасом телефона и определять направление, в котором он указывает. Эта информация записывается в EXIF в виде курсора по компасу каждый раз, когда вы делаете снимок.
Давайте определим, в каком направлении я смотрел, когда делал каждую из этих фотографий:
Мы будем использовать следующие свойства exif-Image, чтобы определить направление, в котором была обращена камера:
gps_img_direction: направление по компасу, которое представляет собой направление, в котором камера смотрела, когда была сделана фотография, выраженное в десятичных градусах. 0 ° северной широты, 90 ° восточной долготы, 180 ° южной широты и 270 ° западной долготы.
gps_img_direction_ref: контрольная точка для gps_img_direction. Это может быть T, что означает, что 0 ° относится к истинному или истинному северу, или M, что означает, что 0 ° относится к магнитному северу. В большинстве случаев используется истинный север.
Код ниже показывает направление камеры для четырех фотографий озера. Он использует несколько служебных функций:
градусов_to_direction (): эта функция преобразует направления по компасу в основные направления (например, N, NE, NNE и т д);
format_direction_ref (): эта функция преобразует значение в удобочитаемую строку gps_img_direction_ref.
Когда вы запустите код, вы увидите следующий результат:
На какой высоте был сделан снимок?
В дополнение к предоставлению координат местоположения, GPS также может использоваться для определения высоты. Некоторые смартфоны оснащены барометрами (которые измеряют атмосферное давление), которые используются для повышения точности измерения высоты.
Давайте узнаем, на какой высоте были сделаны эти фотографии:
Мы будем использовать эти свойства изображения Exif для определения высоты:
gps_altitude: высота в метрах;
gps_altitude_ref: контрольная точка для gps_altitude. Это значение равно 0, что означает, что значение в gps_altitude относится к метрам над уровнем моря, или 1, что означает, что значение в gps_altitude относится к метрам ниже уровня моря.
Следующий код показывает высоту, сообщаемую телефоном при съемке каждой фотографии. Он использует служебную функцию format_altitude (), которая определяет, находится ли заданная высота выше или ниже уровня моря:
Я мог бы рассказать вам, где я сделал эти фотографии, но вы уже знаете, как узнать.
Двигался ли фотограф?
Смартфоны используют комбинацию местоположений GPS с течением времени и акселерометр для определения скорости телефона и направления, в котором он движется. Некоторые телефоны предоставляют эту информацию как часть метаданных EXIF на фотографиях.
Мой Motorola One Hyper не записывает метаданные скорости, но мой iPhone записывает. Вы можете получить доступ к этим данным, используя эти два метода объекта Exif Image:
gps_speed: скорость, выраженная числом;
gps_speed_ref: единицы скорости, используемые для значения в gps_speed. Это значение может быть: K — для километров в час; M — для миль в час; N означает морские мили в час или «узлы».
Рассмотрим следующие фото:
Вот код, который выводит записанную скорость при съемке каждой фотографии. Включает универсальную функцию format_speed_ref (), которая определяет единицы сообщаемой скорости:
Редактирование EXIF данных и их сохранение
Пока мы ограничились простым чтением метаданных EXIF с фотографий. Следующим шагом является внесение изменений в эти данные, а затем сохранение результатов в виде нового файла фотографии.
Редактирование координат фотографии
На этом этапе вы должны знать, как считывать координаты из EXIF и использовать эти координаты, чтобы открыть карту Google, чтобы показать место, где была сделана фотография.
Вот код для этого. Используйте служебную функцию draw_map_for_location (), которую мы определили ранее:
Он также открывает новую вкладку браузера с картой Google, на которой показаны отели Swan и Dolphin, которые находятся в нескольких минутах ходьбы от Walt Disney World во Флориде.
Давайте сделаем вещи немного интереснее, изменив координаты, встроенные в данные EXIF фотографии, чтобы указать, что она была сделана в Зоне 51. Если вы не слышали об этом месте, это военный объект в Неваде, о котором говорят теоретики заговор, правительство США хранит тела инопланетян и космический корабль, захваченный в 1950-х годах. Его координаты: 37,0 ° 14 ‘3,6 «северной широты, 115 ° 48’ 23,99» западной долготы.
Вы видели, что при чтении значения тега EXIF с использованием объекта Exif Image просто считывается значение в соответствующем свойстве. Точно так же изменение его значения — это просто вопрос присвоения нового значения этому свойству. В этом случае мы присвоим значения, определяющие координаты Зоны 51, свойствам изображения gps_latitude, gps_latitude_ref, gps_longitude и gps_longitude_ref:
Запуск кода приведет к следующему результату …
. и откроется новая вкладка Google Map, показывающая Зону 51.
Заполнение неиспользуемых тегов EXIF
Текущая спецификация EXIF определяет множество тегов, и большинство камер заполняют только небольшую их часть. Модуль exif позволяет вам заполнять любые EXIF-теги, которым не присвоено значение.
Примечание. Модуль exif записывает только теги в спецификации EXIF, но не дополнительные теги, включенные поставщиками. «Официальные» теги в спецификации EXIF подчеркнуты.
Вы можете присвоить значение тегу вне спецификации EXIF, даже тегу, который вы создали. Объект Image будет хранить это значение, но только до тех пор, пока объект остается в памяти. Вы не сможете сохранять теги, отличные от EXIF, или их значения, потому что метод, преобразующий данные в объекте Image для записи в файл, учитывает только стандартные теги EXIF.
Вот несколько тегов EXIF, которые вы, возможно, захотите вставить, поскольку они полезны для управления вашей библиотекой фотографий. Оба принимают строковые значения:
ImageDescription: описание фото. В объектах Exif Image это отображается как свойство image_description.
Авторские права: Уведомление об авторских правах на фотографии. В объектах Exif Image это собственность авторских прав.
Вот код, который заполняет эти теги:
Выполнение кода дает следующий результат:
Сохранение фото с обновленными данными
Теперь, когда мы отредактировали данные EXIF в изображении, давайте сохраним их как новый файл с именем hotel_updated.jpg.
Этот код создает объект файла update_hotel_file для записи двоичных данных в файл с именем hotel_updated.jpg. Затем он использует метод Image get_file () для получения данных об изображении отеля в сериализуемом формате и записывает эти данные в файл.
Теперь у вас должен быть новый файл: hotel_updated.jpg. Загрузим его и убедимся, что измененные и добавленные данные сохранены:
Код даст вам такой результат …
. и откроется еще одна вкладка браузера, показывающая Зону 51 на карте.
Удаление данных EXIF и сохранение «очищенной» фотографии
Допустим, вместо изменения данных о местоположении на фотографии отеля мы решили удалить теги. Есть два способа сделать это.
Первый способ — использовать метод delete (), предоставляемый объектом Exif-Image. Используем его для удаления данных о широте:
Второй способ — использовать оператор Python del, который удаляет объекты из памяти. В этом случае мы будем использовать его для удаления атрибутов hotel_image, которые содержат данные о долготе:
Теперь, когда мы удалили данные о местоположении с фотографии, давайте сохраним ее под новым именем hotel_without_location_data.jpg:
Наконец, если вы просто хотите удалить все данные EXIF с фотографии, вы можете использовать метод delete_all () объекта exif Image:
Опять же, после использования delete_all () для удаления всех тегов EXIF вам необходимо сохранить эти изменения. Следующий код сохраняет наше изображение со всеми удаленными тегами как hotel_without_tags.jpg:
Практические и технические соображения
Причины удаления метаданных EXIF
Метаданные EXIF добавляют к цифровым фотографиям совершенно новый уровень информации и ряд вещей, которые необходимо учитывать пользователям, разработчикам и организациям.
Одно из очевидных соображений — конфиденциальность. Метаданные GPS для одной фотографии могут определить ваше местоположение в конкретную дату и время. Гораздо более ценным является GPS, собранный с чьей-то камеры, поскольку он содержит шаблоны, которые можно проанализировать, чтобы определить, где вы живете, работаете и какие места вы часто посещаете в своей повседневной жизни. Вот почему наиболее авторитетные сайты социальных сетей удаляют эту информацию, когда вы публикуете свои фотографии в Интернете. Помните, это означает лишь то, что ваши фотографии в галерее социальной сети не содержат данных GPS. Нет никакой гарантии, что служба не записала информацию о местоположении, чтобы передать ее рекламодателю перед ее удалением.
Другие метаданные EXIF, такие как марка, модель, настройки и даже ориентация камеры, могут использоваться для связывания серии фотографий с конкретным человеком.
Некоторые фотографы больше озабочены секретностью, чем конфиденциальностью, когда речь идет о метаданных своих фотографий. Они не хотят разглашать настройки камеры, которые использовали при съемке.
Причины редактирования или добавления метаданных EXIF
Одной из первоначальных причин, по которой был разработан формат метаданных EXIF, было упрощение автоматизации процесса каталогизации, сортировки и поиска в коллекции цифровых фотографий. EXIF позволяет искать фотографии, сделанные в определенный период, с использованием определенного устройства или места. Другие теги, такие как тег авторских прав, позволяют искать фотографии, сделанные определенным фотографом, а также защищать их авторские права.
Хотя тег ImageDescription был разработан для хранения описания изображения, его также можно использовать для хранения другой полезной текстовой информации о фотографии, например тегов классификации изображений или инструкций по обработке и редактированию фотографии.
Метаданные EXIF особенно полезны в мобильных приложениях, которые записывают одновременные комбинации визуальной информации, информации о дате / времени и информации о местоположении. Например, от техника может потребоваться сделать фотографии выполняемых ремонтных работ «до» и «после» с указанием того, где, когда и как они были выполнены.
Другие вещи, которые следует учитывать
Как мы видели в различных тегах, записываемых устройствами iPhone и Android для фотосъемки в этой статье, разные камеры записывают разные наборы тегов EXIF. Программное обеспечение для редактирования фотографий часто записывает информацию на разных тегах или добавляет свои собственные теги. Эти дополнительные метаданные часто могут указывать на то, что фотография была изменена.
В фотографии дикой природы существует концепция этического EXIF, которая описывает этические стандарты, которых следует придерживаться при съемке. Он включает такую информацию, как состояние здоровья и уровень стресса животного на фотографии, как долго животное находится в неволе и было ли оно удалено из среды обитания для фотографирования.
Наконец, есть сообщения, которые появляются в мобильных приложениях, использующих камеру при первом использовании. Обычно они говорят что-то вроде: «Это приложение использует камеру. Вы согласны?», Но большинство из них не дает понять, что камера добавляет местоположение и другие метаданные к каждой сделанной фотографии. Если вы пишете мобильные приложения, использовать камеру, вы можете сообщить об этом пользователю.
Знание Python — непростой полезный навык не только для программиста, но и для аналитика и даже маркетолога. С его помощью вы можете сами написать простой парсер, написать небольшое приложение для своего бизнеса и даже увеличить свой доход, выполняя заказы фрилансера. Если вы хотите еще больше накачать и освоить этот язык под строгим руководством наших опытных наставников, ознакомьтесь с курсом Fullstack Python и Python Developer для веб-разработки.
Источники
- https://nezlop.ru/kak-posmotret-exif-dannye-fotografii/
- https://www.kaspersky.ru/blog/exif-privacy/13506/
- https://www.liveinternet.ru/users/martina25/post406214948/
- https://temofeev.ru/info/articles/kak-schityvat-i-udalyat-metadannye-iz-vashikh-fotografiy-s-pomoshchyu-python/