File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -267,6 +267,14 @@ def metadata(self, key: str | None = None) -> Any:
267267 # map tag number to tag name
268268 exif [TAGS [tag ]] = value
269269
270+ # Camera-specific tags (FocalLength, ExposureTime, FNumber,
271+ # ISOSpeedRatings, LensModel, ...) live in a separate "Exif" sub-IFD
272+ # that Image.getexif() does not flatten into the top-level dict --
273+ # 0x8769 is the fixed EXIF-spec tag id for the pointer to it.
274+ for tag , value in meta .get_ifd (0x8769 ).items ():
275+ if tag in TAGS :
276+ exif [TAGS [tag ]] = value
277+
270278 if key is None :
271279 return exif
272280 else :
Original file line number Diff line number Diff line change @@ -190,14 +190,23 @@ def test_disp(self):
190190 # im.disp(block=False)
191191 pass
192192
193- # new test
194193 def test_metadata (self ):
195194 """Test reading image metadata"""
196- # TODO: Test with image file that has metadata
197- # im = Image.Read('test_image.jpg')
198- # metadata = im.metadata()
199- # self.assertIsNotNone(metadata)
200- pass
195+ im = Image .Read ("walls-l.png" )
196+ metadata = im .metadata ()
197+ self .assertIsNotNone (metadata )
198+
199+ # top-level IFD0 tags
200+ self .assertEqual (metadata ["Make" ], "Apple" )
201+ self .assertEqual (metadata ["Model" ], "iPhone 5s" )
202+ self .assertEqual (im .metadata ("Make" ), "Apple" )
203+
204+ # camera-specific tags live in a separate "Exif" sub-IFD that
205+ # Image.getexif() doesn't flatten into the top-level dict --
206+ # regression test for that sub-IFD merge
207+ self .assertIn ("FocalLength" , metadata )
208+ self .assertAlmostEqual (im .metadata ("FocalLength" ), 4.15 )
209+ self .assertAlmostEqual (metadata ["FNumber" ], 2.2 )
201210
202211 # new test
203212 def test_showpixels (self ):
You can’t perform that action at this time.
0 commit comments