Skip to content

Commit

Permalink
Merge pull request #6749 from radarhere/exif_lightsource
Browse files Browse the repository at this point in the history
Added LightSource tag values to ExifTags
  • Loading branch information
hugovk committed Dec 26, 2022
2 parents 925e27c + 5c482e2 commit 88420f6
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
10 changes: 9 additions & 1 deletion docs/reference/ExifTags.rst
Expand Up @@ -37,7 +37,15 @@ which provide constants and clear-text names for various well-known EXIF tags.
>>> IFD.Exif.value
34665
>>> IFD(34665).name
'Exif'
'Exif

.. py:data:: LightSource
>>> from PIL.ExifTags import LightSource
>>> LightSource.Unknown.value
0
>>> LightSource(0).name
'Unknown'

Two of these values are also exposed as dictionaries.

Expand Down
28 changes: 28 additions & 0 deletions docs/releasenotes/9.4.0.rst
Expand Up @@ -45,6 +45,34 @@ removes the hidden RGB values for better compression by default in libwebp 0.5
or later. By setting this option to ``True``, the encoder will keep the hidden
RGB values.

Added IFD, Interop and LightSource ExifTags enums
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

:py:data:`~PIL.ExifTags.IFD` has been added, allowing enums to be used with
:py:meth:`~PIL.Image.Exif.get_ifd`::

from PIL import Image, ExifTags
im = Image.open("Tests/images/flower.jpg")
print(im.getexif().get_ifd(ExifTags.IFD.Exif))

``IFD1`` can also be used with :py:meth:`~PIL.Image.Exif.get_ifd`, but it should
not be used in other contexts, as the enum value is only internally meaningful.

:py:data:`~PIL.ExifTags.Interop` has been added for tags within the Interop IFD::

from PIL import Image, ExifTags
im = Image.open("Tests/images/flower.jpg")
interop_ifd = im.getexif().get_ifd(ExifTags.IFD.Interop)
print(interop_ifd.get(ExifTags.Interop.InteropIndex)) # R98

:py:data:`~PIL.ExifTags.LightSource` has been added for values within the LightSource
tag::

from PIL import Image, ExifTags
im = Image.open("Tests/images/iptc.jpg")
exif_ifd = im.getexif().get_ifd(ExifTags.IFD.Exif)
print(ExifTags.LightSource(exif_ifd[0x9208])) # LightSource.Unknown

getxmp()
^^^^^^^^

Expand Down
24 changes: 24 additions & 0 deletions src/PIL/ExifTags.py
Expand Up @@ -354,3 +354,27 @@ class IFD(IntEnum):
Makernote = 37500
Interop = 40965
IFD1 = -1


class LightSource(IntEnum):
Unknown = 0
Daylight = 1
Fluorescent = 2
Tungsten = 3
Flash = 4
Fine = 9
Cloudy = 10
Shade = 11
DaylightFluorescent = 12
DayWhiteFluorescent = 13
CoolWhiteFluorescent = 14
WhiteFluorescent = 15
StandardLightA = 17
StandardLightB = 18
StandardLightC = 19
D55 = 20
D65 = 21
D75 = 22
D50 = 23
ISO = 24
Other = 255

0 comments on commit 88420f6

Please sign in to comment.