diff --git a/src/sigal/gallery.py b/src/sigal/gallery.py index 51cb5d7..8ca5e01 100644 --- a/src/sigal/gallery.py +++ b/src/sigal/gallery.py @@ -264,7 +264,7 @@ class Image(Media): datetime_format = self.settings["datetime_format"] return ( get_exif_tags(self.raw_exif, datetime_format=datetime_format) - if self.raw_exif and self.src_ext in (".jpg", ".jpeg") + if self.raw_exif and self.src_ext in (".jpg", ".jpeg", ".heic") else None ) @@ -289,7 +289,7 @@ class Image(Media): @cached_property def raw_exif(self): """If not `None`, contains the raw EXIF tags.""" - if self.src_ext in (".jpg", ".jpeg"): + if self.src_ext in (".jpg", ".jpeg", ".heic"): return self.file_metadata["exif"] @cached_property diff --git a/src/sigal/image.py b/src/sigal/image.py index 291b84a..4996125 100644 --- a/src/sigal/image.py +++ b/src/sigal/image.py @@ -225,7 +225,10 @@ def get_exif_data(filename): try: with warnings.catch_warnings(record=True) as caught_warnings: - exif = img._getexif() or {} + exif = {} + exifdata = img.getexif() + if exifdata: + exif = exifdata._get_merged_dict() except ZeroDivisionError: logger.warning("Failed to read EXIF data.") return None @@ -295,7 +298,7 @@ def get_image_metadata(filename): logger.error("Could not open image %s metadata: %s", filename, e) else: try: - if os.path.splitext(filename)[1].lower() in (".jpg", ".jpeg"): + if os.path.splitext(filename)[1].lower() in (".jpg", ".jpeg", ".heic"): exif = get_exif_data(img) except Exception as e: logger.warning("Could not read EXIF data from %s: %s", filename, e)