March 4, 2019

Получаем метаданные с помощью Python.

http://tele.click/darkside_team

Привет хацкер, сегодня будем писать скрипт для получения метаданных из картинок фото. Метаданные - данные о самих данных. Сегодня мы научимся их доставать.

Метаданные — информация о другой информации, или данные, относящиеся к дополнительной информации о содержимом или объекте. Метаданные раскрывают сведения о признаках и свойствах, характеризующих какие-либо сущности, позволяющие автоматически искать и управлять ими в больших информационных потоках.

Для написания нам понадобится библиотека Pillow и argparse.

# Coded by Dark $ide —- http://tele.click/darkside_team
#!/usr/bin/python3.6 #тут указывайте свой путь к python
# -*- coding: utf-8 -*- #кодировка

#импортируем необходимые модули

import argparse 
from PIL import Image
from PIL.ExifTags import TAGS

#функция ниже получает на вход имя файла(картинки) и имя файла(для вывода информации)

def getMetaData(imgname, out):  

#получаем словарь из метаданных картинки и выводим его в терминал, #если не указано имя файла для вывода информации.

 try:
    metaData = {}
    imgFile = Image.open(imgname)
    print("Getting meta data...")
    info = imgFile._getexif()
    if info:
        print("Found meta data!")
#перебор данных в словаре с метаданными
        for (tag, value) in info.items():
               tagname = TAGS.get(tag, tag)
               metaData[tagname] = value
               if not out:
                   print(tagname, value)
#если указано имя файла то выводим в файл
               if out:
                print("Outputting to file...")
               with open(out, 'w') as f:
                   for (tagname, value) in metaData.items():
                       f.write(str(tagname)+"\t"+str(value)+"\n")
  #если произошла ошибка выводим сообщение о ней
 except:
                         print("Failed")
#функция main(). Парсим в ней аргументы командной строки.
def main():
   parser = argparse.ArgumentParser()
   parser.add_argument("img", help="name of img file.")
   parser.add_argument("-o", "--output", help="dump data out to file")
   args = parser.parse_args()
   if args.img:
       getMetaData(args.img, args.output)
   else:
       print(parser.usage)
#точка входа
if __name__ == '__main__':
   main()

Пример вывода нашего скрипта:

Dark $ide - Твоя Тёмная Сторона