mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-04-24 19:22:00 +03:00
Merge pull request #6335 from radarhere/exif
This commit is contained in:
commit
b261e17907
|
@ -124,6 +124,15 @@ def test_parallax():
|
||||||
assert exif.get_ifd(0x927C)[0xB211] == -3.125
|
assert exif.get_ifd(0x927C)[0xB211] == -3.125
|
||||||
|
|
||||||
|
|
||||||
|
def test_reload_exif_after_seek():
|
||||||
|
with Image.open("Tests/images/sugarshack.mpo") as im:
|
||||||
|
exif = im.getexif()
|
||||||
|
del exif[296]
|
||||||
|
|
||||||
|
im.seek(1)
|
||||||
|
assert 296 in exif
|
||||||
|
|
||||||
|
|
||||||
def test_mp():
|
def test_mp():
|
||||||
for test_file in test_files:
|
for test_file in test_files:
|
||||||
with Image.open(test_file) as im:
|
with Image.open(test_file) as im:
|
||||||
|
|
|
@ -497,6 +497,26 @@ class TestFileTiff:
|
||||||
exif = im.getexif()
|
exif = im.getexif()
|
||||||
check_exif(exif)
|
check_exif(exif)
|
||||||
|
|
||||||
|
def test_modify_exif(self, tmp_path):
|
||||||
|
outfile = str(tmp_path / "temp.tif")
|
||||||
|
with Image.open("Tests/images/ifd_tag_type.tiff") as im:
|
||||||
|
exif = im.getexif()
|
||||||
|
exif[256] = 100
|
||||||
|
|
||||||
|
im.save(outfile, exif=exif)
|
||||||
|
|
||||||
|
with Image.open(outfile) as im:
|
||||||
|
exif = im.getexif()
|
||||||
|
assert exif[256] == 100
|
||||||
|
|
||||||
|
def test_reload_exif_after_seek(self):
|
||||||
|
with Image.open("Tests/images/multipage.tiff") as im:
|
||||||
|
exif = im.getexif()
|
||||||
|
del exif[256]
|
||||||
|
im.seek(1)
|
||||||
|
|
||||||
|
assert 256 in exif
|
||||||
|
|
||||||
def test_exif_frames(self):
|
def test_exif_frames(self):
|
||||||
# Test that EXIF data can change across frames
|
# Test that EXIF data can change across frames
|
||||||
with Image.open("Tests/images/g4-multi.tiff") as im:
|
with Image.open("Tests/images/g4-multi.tiff") as im:
|
||||||
|
|
|
@ -1383,6 +1383,10 @@ class Image:
|
||||||
def getexif(self):
|
def getexif(self):
|
||||||
if self._exif is None:
|
if self._exif is None:
|
||||||
self._exif = Exif()
|
self._exif = Exif()
|
||||||
|
self._exif._loaded = False
|
||||||
|
elif self._exif._loaded:
|
||||||
|
return self._exif
|
||||||
|
self._exif._loaded = True
|
||||||
|
|
||||||
exif_info = self.info.get("exif")
|
exif_info = self.info.get("exif")
|
||||||
if exif_info is None:
|
if exif_info is None:
|
||||||
|
@ -1407,6 +1411,12 @@ class Image:
|
||||||
|
|
||||||
return self._exif
|
return self._exif
|
||||||
|
|
||||||
|
def _reload_exif(self):
|
||||||
|
if self._exif is None or not self._exif._loaded:
|
||||||
|
return
|
||||||
|
self._exif._loaded = False
|
||||||
|
self.getexif()
|
||||||
|
|
||||||
def getim(self):
|
def getim(self):
|
||||||
"""
|
"""
|
||||||
Returns a capsule that points to the internal image memory.
|
Returns a capsule that points to the internal image memory.
|
||||||
|
|
|
@ -82,6 +82,7 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
|
||||||
if i16(segment) == 0xFFE1: # APP1
|
if i16(segment) == 0xFFE1: # APP1
|
||||||
n = i16(self.fp.read(2)) - 2
|
n = i16(self.fp.read(2)) - 2
|
||||||
self.info["exif"] = ImageFile._safe_read(self.fp, n)
|
self.info["exif"] = ImageFile._safe_read(self.fp, n)
|
||||||
|
self._reload_exif()
|
||||||
|
|
||||||
mptype = self.mpinfo[0xB002][frame]["Attribute"]["MPType"]
|
mptype = self.mpinfo[0xB002][frame]["Attribute"]["MPType"]
|
||||||
if mptype.startswith("Large Thumbnail"):
|
if mptype.startswith("Large Thumbnail"):
|
||||||
|
@ -90,6 +91,7 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
|
||||||
self._size = (exif[40962], exif[40963])
|
self._size = (exif[40962], exif[40963])
|
||||||
elif "exif" in self.info:
|
elif "exif" in self.info:
|
||||||
del self.info["exif"]
|
del self.info["exif"]
|
||||||
|
self._reload_exif()
|
||||||
|
|
||||||
self.tile = [("jpeg", (0, 0) + self.size, self.offset, (self.mode, ""))]
|
self.tile = [("jpeg", (0, 0) + self.size, self.offset, (self.mode, ""))]
|
||||||
self.__frame = frame
|
self.__frame = frame
|
||||||
|
|
|
@ -1136,6 +1136,7 @@ class TiffImageFile(ImageFile.ImageFile):
|
||||||
self.__frame += 1
|
self.__frame += 1
|
||||||
self.fp.seek(self._frame_pos[frame])
|
self.fp.seek(self._frame_pos[frame])
|
||||||
self.tag_v2.load(self.fp)
|
self.tag_v2.load(self.fp)
|
||||||
|
self._reload_exif()
|
||||||
# fill the legacy tag/ifd entries
|
# fill the legacy tag/ifd entries
|
||||||
self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2)
|
self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2)
|
||||||
self.__frame = frame
|
self.__frame = frame
|
||||||
|
|
Loading…
Reference in New Issue
Block a user