Merge pull request #2449 from hugovk/dpi-from-exif

If DPI isn't in JPEG header, fetch from EXIF
This commit is contained in:
wiredfool 2017-03-29 21:24:46 +01:00 committed by GitHub
commit 977f319234
3 changed files with 15 additions and 2 deletions

View File

@ -117,6 +117,11 @@ def APP(self, marker):
# plus constant header size
self.info["mpoffset"] = self.fp.tell() - n + 4
# If DPI isn't in JPEG header, fetch from EXIF
if "dpi" not in self.info and "exif" in self.info:
x_resolution = self._getexif()[0x011A]
self.info["dpi"] = x_resolution[0] / x_resolution[1]
def COM(self, marker):
#

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -167,14 +167,14 @@ class TestFileJpeg(PillowTestCase):
def test_progressive_large_buffer_highest_quality(self):
f = self.tempfile('temp.jpg')
im = self.gen_random_image((255,255))
im = self.gen_random_image((255, 255))
# this requires more bytes than pixels in the image
im.save(f, format="JPEG", progressive=True, quality=100)
def test_progressive_cmyk_buffer(self):
# Issue 2272, quality 90 cmyk image is tripping the large buffer bug.
f = BytesIO()
im = self.gen_random_image((256,256), 'CMYK')
im = self.gen_random_image((256, 256), 'CMYK')
im.save(f, format='JPEG', progressive=True, quality=94)
def test_large_exif(self):
@ -500,6 +500,14 @@ class TestFileJpeg(PillowTestCase):
reloaded.load()
self.assertEqual(im.info['dpi'], reloaded.info['dpi'])
def test_dpi_from_exif(self):
# Arrange
# This Photoshop CC 2017 image has DPI in EXIF not metadata
im = Image.open("Tests/images/photoshop-200dpi.jpg")
# Act / Assert
self.assertEqual(im.info.get("dpi"), 200)
if __name__ == '__main__':
unittest.main()