web-dev-qa-db-fra.com

Obtenez la date et l'heure auxquelles la photo a été prise à partir des données EXIF ​​à l'aide de PIL

Je peux obtenir les données EXIF ​​d'une image en utilisant PIL, mais comment puis-je obtenir la date et l'heure auxquelles la photo a été prise?

25
sashoalm

J'ai finalement trouvé la réponse, la balise dont j'avais besoin était 6867 :

from PIL import Image
def get_date_taken(path):
    return Image.open(path)._getexif()[36867]
40
sashoalm

J'aime utiliser exif-py parce que c'est pur-python, ne nécessite pas de compilation/installation et fonctionne avec les deux python 2.x et 3.x, ce qui le rend idéal pour le regroupement avec de petits portables python applications.

Lien: https://github.com/ianare/exif-py

Exemple pour obtenir la date et l'heure de prise d'une photo:

import exifread
with open('image.jpg', 'rb') as fh:
    tags = exifread.process_file(fh, stop_tag="EXIF DateTimeOriginal")
    dateTaken = tags["EXIF DateTimeOriginal"]
    return dateTaken
12
Alecz
try:
    import PIL
    import PIL.Image as PILimage
    from PIL import ImageDraw, ImageFont, ImageEnhance
    from PIL.ExifTags import TAGS, GPSTAGS
except ImportError as err:
    exit(err)


class Worker(object):
    def __init__(self, img):
        self.img = img
        self.get_exif_data()
        self.date =self.get_date_time()
        super(Worker, self).__init__()

    def get_exif_data(self):
        exif_data = {}
        info = self.img._getexif()
        if info:
            for tag, value in info.items():
                decoded = TAGS.get(tag, tag)
                if decoded == "GPSInfo":
                    gps_data = {}
                    for t in value:
                        sub_decoded = GPSTAGS.get(t, t)
                        gps_data[sub_decoded] = value[t]

                    exif_data[decoded] = gps_data
                else:
                    exif_data[decoded] = value
        self.exif_data = exif_data
        # return exif_data 

    def get_date_time(self):
        if 'DateTime' in self.exif_data:
            date_and_time = self.exif_data['DateTime']
            return date_and_time 


def main():
    date = image.date
    print(date)

if __name__ == '__main__':
    try:
        img = PILimage.open(path + filename)
        image = Worker(img)
        date = image.date
        print(date)

    except Exception as e:
        print(e)
3
Kireal

Du dict retourné par _getexif () en utilisant la clé 'DateTimeOriginal'?

0
tpatja