use new metadata for offset localize
This commit is contained in:
parent
9b3366e2a1
commit
586f5e5607
|
@ -100,7 +100,8 @@ def write_exif(picture, img_metadata):
|
||||||
# 'captured_at': 1603459736644, 'geometry': {'type': 'Point', 'coordinates': [2.5174596904057, 48.777089857534]}, 'id': '485924785946693'}
|
# 'captured_at': 1603459736644, 'geometry': {'type': 'Point', 'coordinates': [2.5174596904057, 48.777089857534]}, 'id': '485924785946693'}
|
||||||
|
|
||||||
with writer.Writer(picture) as image:
|
with writer.Writer(picture) as image:
|
||||||
image.writePictureMetadata(img_metadata)
|
image.add_datetimeoriginal(img_metadata)
|
||||||
|
image.add_lat_lon(img_metadata)
|
||||||
image.add_altitude(img_metadata)
|
image.add_altitude(img_metadata)
|
||||||
image.add_direction(img_metadata)
|
image.add_direction(img_metadata)
|
||||||
image.apply()
|
image.apply()
|
||||||
|
|
20
writer.py
20
writer.py
|
@ -109,7 +109,7 @@ class Writer():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if metadata.capture_time.utcoffset() is None:
|
if metadata.capture_time.utcoffset() is None:
|
||||||
metadata.capture_time = self.localize(metadata)
|
metadata.capture_time = self.localize(metadata.capture_time, metadata)
|
||||||
|
|
||||||
# for capture time, override GPSInfo time and DatetimeOriginal
|
# for capture time, override GPSInfo time and DatetimeOriginal
|
||||||
self.updated_exif["Exif.Photo.DateTimeOriginal"] = metadata.capture_time.strftime("%Y:%m:%d %H:%M:%S")
|
self.updated_exif["Exif.Photo.DateTimeOriginal"] = metadata.capture_time.strftime("%Y:%m:%d %H:%M:%S")
|
||||||
|
@ -127,7 +127,7 @@ class Writer():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if metadata.capture_time.utcoffset() is None:
|
if metadata.capture_time.utcoffset() is None:
|
||||||
metadata.capture_time = self.localize(metadata)
|
metadata.capture_time = self.localize(metadata.capture_time, metadata)
|
||||||
|
|
||||||
# for capture time, override DatetimeOriginal and SubSecTimeOriginal
|
# for capture time, override DatetimeOriginal and SubSecTimeOriginal
|
||||||
self.updated_exif["Exif.Photo.DateTimeOriginal"] = metadata.capture_time.strftime("%Y:%m:%d %H:%M:%S")
|
self.updated_exif["Exif.Photo.DateTimeOriginal"] = metadata.capture_time.strftime("%Y:%m:%d %H:%M:%S")
|
||||||
|
@ -157,22 +157,28 @@ class Writer():
|
||||||
return f"{'+' if offset_hour >= 0 else '-'}{int(abs(offset_hour)):02}:{int(remainer/60):02}"
|
return f"{'+' if offset_hour >= 0 else '-'}{int(abs(offset_hour)):02}:{int(remainer/60):02}"
|
||||||
|
|
||||||
|
|
||||||
def localize(self, metadata: PictureMetadata) -> datetime:
|
def localize(self, naive_dt: datetime, metadata: PictureMetadata) -> datetime:
|
||||||
"""
|
"""
|
||||||
Localize a datetime in the timezone of the picture
|
Localize a datetime in the timezone of the picture
|
||||||
If the picture does not contains GPS position, the datetime will not be modified.
|
If the picture does not contains GPS position, the datetime will not be modified.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
new_lat_lon = metadata.longitude is not None and metadata.latitude is not None
|
||||||
|
if new_lat_lon :
|
||||||
|
lon = metadata.longitude
|
||||||
|
lat = metadata.latitude
|
||||||
|
|
||||||
|
else:
|
||||||
exif = self.exif
|
exif = self.exif
|
||||||
try:
|
try:
|
||||||
lon = exif["Exif.GPSInfo.GPSLongitude"]
|
lon = exif["Exif.GPSInfo.GPSLongitude"]
|
||||||
lon_ref = exif.get("Exif.GPSInfo.GPSLongitudeRef", "E")
|
lon_ref = exif.get("Exif.GPSInfo.GPSLongitudeRef", "E")
|
||||||
lat = exif["Exif.GPSInfo.GPSLatitude"]
|
lat = exif["Exif.GPSInfo.GPSLatitude"]
|
||||||
lat_ref = exif.get("Exif.GPSInfo.GPSLatitudeRef", "N")
|
lat_ref = exif.get("Exif.GPSInfo.GPSLatitudeRef", "N")
|
||||||
except KeyError:
|
|
||||||
return metadata.capture_time # canot localize, returning same date
|
|
||||||
|
|
||||||
lon = self._from_dms(lon) * (1 if lon_ref == "E" else -1)
|
lon = self._from_dms(lon) * (1 if lon_ref == "E" else -1)
|
||||||
lat = self._from_dms(lat) * (1 if lat_ref == "N" else -1)
|
lat = self._from_dms(lat) * (1 if lat_ref == "N" else -1)
|
||||||
|
except KeyError:
|
||||||
|
return metadata.capture_time # canot localize, returning same date
|
||||||
|
|
||||||
tz_name = tz_finder.timezone_at(lng=lon, lat=lat)
|
tz_name = tz_finder.timezone_at(lng=lon, lat=lat)
|
||||||
if not tz_name:
|
if not tz_name:
|
||||||
|
@ -180,7 +186,7 @@ class Writer():
|
||||||
|
|
||||||
tz = pytz.timezone(tz_name)
|
tz = pytz.timezone(tz_name)
|
||||||
|
|
||||||
return tz.localize(metadata.capture_time)
|
return tz.localize(naive_dt)
|
||||||
|
|
||||||
|
|
||||||
def _from_dms(self, val: str) -> float:
|
def _from_dms(self, val: str) -> float:
|
||||||
|
|
Loading…
Reference in New Issue