Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added LightSource tag values to ExifTags #6749

Merged
merged 3 commits into from Dec 26, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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