Added IFD1 reading

This commit is contained in:
Andrew Murray 2022-12-05 09:09:00 +11:00
parent a0326245a2
commit 8ada23ed04
3 changed files with 26 additions and 6 deletions

View File

@ -7,7 +7,14 @@ import warnings
import pytest
from PIL import Image, ImageDraw, ImagePalette, UnidentifiedImageError, features
from PIL import (
ExifTags,
Image,
ImageDraw,
ImagePalette,
UnidentifiedImageError,
features,
)
from .helper import (
assert_image_equal,
@ -808,6 +815,18 @@ class TestImage:
reloaded_exif.load(exif.tobytes())
assert reloaded_exif.get_ifd(0xA005) == exif.get_ifd(0xA005)
def test_exif_ifd1(self):
with Image.open("Tests/images/flower.jpg") as im:
exif = im.getexif()
assert exif.get_ifd(ExifTags.IFD.IFD1) == {
513: 2036,
514: 5448,
259: 6,
296: 2,
282: 180.0,
283: 180.0,
}
def test_exif_ifd(self):
with Image.open("Tests/images/flower.jpg") as im:
exif = im.getexif()

View File

@ -353,3 +353,4 @@ class IFD(IntEnum):
GPSInfo = 34853
Makernote = 37500
Interop = 40965
IFD1 = -1

View File

@ -3641,17 +3641,17 @@ class Exif(MutableMapping):
def get_ifd(self, tag):
if tag not in self._ifds:
if tag in [ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo]:
# exif, gpsinfo
if tag == ExifTags.IFD.IFD1:
if self._info is not None:
self._ifds[tag] = self._get_ifd_dict(self._info.next)
elif tag in [ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo]:
if tag in self:
self._ifds[tag] = self._get_ifd_dict(self[tag])
elif tag in [ExifTags.IFD.Interop, ExifTags.IFD.Makernote]:
# interop, makernote
if ExifTags.IFD.Exif not in self._ifds:
self.get_ifd(ExifTags.IFD.Exif)
tag_data = self._ifds[ExifTags.IFD.Exif][tag]
if tag == ExifTags.IFD.Makernote:
# makernote
from .TiffImagePlugin import ImageFileDirectory_v2
if tag_data[:8] == b"FUJIFILM":
@ -3727,7 +3727,7 @@ class Exif(MutableMapping):
makernote = {0x1101: dict(self._fixup_dict(camerainfo))}
self._ifds[tag] = makernote
else:
# interop
# Interop
self._ifds[tag] = self._get_ifd_dict(tag_data)
return self._ifds.get(tag, {})