mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-05-02 15:03:42 +03:00
Added IFD1 reading
This commit is contained in:
parent
a0326245a2
commit
8ada23ed04
|
@ -7,7 +7,14 @@ import warnings
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImagePalette, UnidentifiedImageError, features
|
from PIL import (
|
||||||
|
ExifTags,
|
||||||
|
Image,
|
||||||
|
ImageDraw,
|
||||||
|
ImagePalette,
|
||||||
|
UnidentifiedImageError,
|
||||||
|
features,
|
||||||
|
)
|
||||||
|
|
||||||
from .helper import (
|
from .helper import (
|
||||||
assert_image_equal,
|
assert_image_equal,
|
||||||
|
@ -808,6 +815,18 @@ class TestImage:
|
||||||
reloaded_exif.load(exif.tobytes())
|
reloaded_exif.load(exif.tobytes())
|
||||||
assert reloaded_exif.get_ifd(0xA005) == exif.get_ifd(0xA005)
|
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):
|
def test_exif_ifd(self):
|
||||||
with Image.open("Tests/images/flower.jpg") as im:
|
with Image.open("Tests/images/flower.jpg") as im:
|
||||||
exif = im.getexif()
|
exif = im.getexif()
|
||||||
|
|
|
@ -353,3 +353,4 @@ class IFD(IntEnum):
|
||||||
GPSInfo = 34853
|
GPSInfo = 34853
|
||||||
Makernote = 37500
|
Makernote = 37500
|
||||||
Interop = 40965
|
Interop = 40965
|
||||||
|
IFD1 = -1
|
||||||
|
|
|
@ -3641,17 +3641,17 @@ class Exif(MutableMapping):
|
||||||
|
|
||||||
def get_ifd(self, tag):
|
def get_ifd(self, tag):
|
||||||
if tag not in self._ifds:
|
if tag not in self._ifds:
|
||||||
if tag in [ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo]:
|
if tag == ExifTags.IFD.IFD1:
|
||||||
# exif, gpsinfo
|
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:
|
if tag in self:
|
||||||
self._ifds[tag] = self._get_ifd_dict(self[tag])
|
self._ifds[tag] = self._get_ifd_dict(self[tag])
|
||||||
elif tag in [ExifTags.IFD.Interop, ExifTags.IFD.Makernote]:
|
elif tag in [ExifTags.IFD.Interop, ExifTags.IFD.Makernote]:
|
||||||
# interop, makernote
|
|
||||||
if ExifTags.IFD.Exif not in self._ifds:
|
if ExifTags.IFD.Exif not in self._ifds:
|
||||||
self.get_ifd(ExifTags.IFD.Exif)
|
self.get_ifd(ExifTags.IFD.Exif)
|
||||||
tag_data = self._ifds[ExifTags.IFD.Exif][tag]
|
tag_data = self._ifds[ExifTags.IFD.Exif][tag]
|
||||||
if tag == ExifTags.IFD.Makernote:
|
if tag == ExifTags.IFD.Makernote:
|
||||||
# makernote
|
|
||||||
from .TiffImagePlugin import ImageFileDirectory_v2
|
from .TiffImagePlugin import ImageFileDirectory_v2
|
||||||
|
|
||||||
if tag_data[:8] == b"FUJIFILM":
|
if tag_data[:8] == b"FUJIFILM":
|
||||||
|
@ -3727,7 +3727,7 @@ class Exif(MutableMapping):
|
||||||
makernote = {0x1101: dict(self._fixup_dict(camerainfo))}
|
makernote = {0x1101: dict(self._fixup_dict(camerainfo))}
|
||||||
self._ifds[tag] = makernote
|
self._ifds[tag] = makernote
|
||||||
else:
|
else:
|
||||||
# interop
|
# Interop
|
||||||
self._ifds[tag] = self._get_ifd_dict(tag_data)
|
self._ifds[tag] = self._get_ifd_dict(tag_data)
|
||||||
return self._ifds.get(tag, {})
|
return self._ifds.get(tag, {})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user