add datetimeoriginal with subsectimeoriginal

This commit is contained in:
Stefal 2023-09-12 22:38:47 +02:00
parent 80d96d7ec7
commit d83771e384

View File

@ -38,6 +38,7 @@ def writePictureMetadata(picture: bytes, metadata: PictureMetadata) -> bytes:
if metadata.capture_time: if metadata.capture_time:
picture = add_gps_datetime(picture, metadata) picture = add_gps_datetime(picture, metadata)
picture = add_datetimeoriginal(picture, metadata)
if metadata.latitude is not None and metadata.longitude is not None: if metadata.latitude is not None and metadata.longitude is not None:
picture = add_lat_lon(picture, metadata) picture = add_lat_lon(picture, metadata)
@ -86,6 +87,25 @@ def add_altitude(picture: bytes, metadata: PictureMetadata, precision: int = 100
return img.get_bytes() return img.get_bytes()
def add_direction(picture: bytes, metadata: PictureMetadata, ref: str = 'T', precision: int = 1000) -> bytes:
"""
Add direction value in GPSImgDirection and GPSImgDirectionRef
"""
direction = metadata.direction
img = pyexiv2.ImageData(picture)
updated_exif = {}
if metadata.direction is not None:
updated_exif['Exif.GPSInfo.GPSImgDirection'] = f"{int(abs(direction % 360.0 * precision))} / {precision}"
updated_exif['Exif.GPSInfo.GPSImgDirectionRef'] = ref
if updated_exif:
img.modify_exif(updated_exif)
return img.get_bytes()
def add_gps_datetime(picture: bytes, metadata: PictureMetadata) -> bytes: def add_gps_datetime(picture: bytes, metadata: PictureMetadata) -> bytes:
""" """
Add GPSDateStamp and GPSTimeStamp Add GPSDateStamp and GPSTimeStamp
@ -111,17 +131,23 @@ def add_gps_datetime(picture: bytes, metadata: PictureMetadata) -> bytes:
return img.get_bytes() return img.get_bytes()
def add_direction(picture: bytes, metadata: PictureMetadata, ref: str = 'T', precision: int = 1000) -> bytes: def add_datetimeoriginal(picture: bytes, metadata: PictureMetadata) -> bytes:
""" """
Add direction value in GPSImgDirection and GPSImgDirectionRef Add date time in Exif DateTimeOriginal and SubSecTimeOriginal tags
""" """
direction = metadata.direction
img = pyexiv2.ImageData(picture) img = pyexiv2.ImageData(picture)
updated_exif = {} updated_exif = {}
if metadata.direction is not None: if metadata.capture_time.utcoffset() is None:
updated_exif['Exif.GPSInfo.GPSImgDirection'] = f"{int(abs(direction % 360.0 * precision))} / {precision}" metadata.capture_time = localize(metadata, img)
updated_exif['Exif.GPSInfo.GPSImgDirectionRef'] = ref
# for capture time, override DatetimeOriginal and SubSecTimeOriginal
updated_exif["Exif.Photo.DateTimeOriginal"] = metadata.capture_time.strftime("%Y:%m:%d %H:%M:%S")
offset = metadata.capture_time.utcoffset()
if offset is not None:
updated_exif["Exif.Photo.OffsetTimeOriginal"] = format_offset(offset)
if metadata.capture_time.microsecond != 0:
updated_exif["Exif.Photo.SubSecTimeOriginal"] = metadata.capture_time.strftime("%f")
if updated_exif: if updated_exif:
img.modify_exif(updated_exif) img.modify_exif(updated_exif)