|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
This module provides constants and clear-text names for various |
|
well-known EXIF tags. |
|
""" |
|
|
|
from enum import IntEnum |
|
|
|
|
|
class Base(IntEnum): |
|
|
|
InteropIndex = 0x0001 |
|
ProcessingSoftware = 0x000B |
|
NewSubfileType = 0x00FE |
|
SubfileType = 0x00FF |
|
ImageWidth = 0x0100 |
|
ImageLength = 0x0101 |
|
BitsPerSample = 0x0102 |
|
Compression = 0x0103 |
|
PhotometricInterpretation = 0x0106 |
|
Thresholding = 0x0107 |
|
CellWidth = 0x0108 |
|
CellLength = 0x0109 |
|
FillOrder = 0x010A |
|
DocumentName = 0x010D |
|
ImageDescription = 0x010E |
|
Make = 0x010F |
|
Model = 0x0110 |
|
StripOffsets = 0x0111 |
|
Orientation = 0x0112 |
|
SamplesPerPixel = 0x0115 |
|
RowsPerStrip = 0x0116 |
|
StripByteCounts = 0x0117 |
|
MinSampleValue = 0x0118 |
|
MaxSampleValue = 0x0119 |
|
XResolution = 0x011A |
|
YResolution = 0x011B |
|
PlanarConfiguration = 0x011C |
|
PageName = 0x011D |
|
FreeOffsets = 0x0120 |
|
FreeByteCounts = 0x0121 |
|
GrayResponseUnit = 0x0122 |
|
GrayResponseCurve = 0x0123 |
|
T4Options = 0x0124 |
|
T6Options = 0x0125 |
|
ResolutionUnit = 0x0128 |
|
PageNumber = 0x0129 |
|
TransferFunction = 0x012D |
|
Software = 0x0131 |
|
DateTime = 0x0132 |
|
Artist = 0x013B |
|
HostComputer = 0x013C |
|
Predictor = 0x013D |
|
WhitePoint = 0x013E |
|
PrimaryChromaticities = 0x013F |
|
ColorMap = 0x0140 |
|
HalftoneHints = 0x0141 |
|
TileWidth = 0x0142 |
|
TileLength = 0x0143 |
|
TileOffsets = 0x0144 |
|
TileByteCounts = 0x0145 |
|
SubIFDs = 0x014A |
|
InkSet = 0x014C |
|
InkNames = 0x014D |
|
NumberOfInks = 0x014E |
|
DotRange = 0x0150 |
|
TargetPrinter = 0x0151 |
|
ExtraSamples = 0x0152 |
|
SampleFormat = 0x0153 |
|
SMinSampleValue = 0x0154 |
|
SMaxSampleValue = 0x0155 |
|
TransferRange = 0x0156 |
|
ClipPath = 0x0157 |
|
XClipPathUnits = 0x0158 |
|
YClipPathUnits = 0x0159 |
|
Indexed = 0x015A |
|
JPEGTables = 0x015B |
|
OPIProxy = 0x015F |
|
JPEGProc = 0x0200 |
|
JpegIFOffset = 0x0201 |
|
JpegIFByteCount = 0x0202 |
|
JpegRestartInterval = 0x0203 |
|
JpegLosslessPredictors = 0x0205 |
|
JpegPointTransforms = 0x0206 |
|
JpegQTables = 0x0207 |
|
JpegDCTables = 0x0208 |
|
JpegACTables = 0x0209 |
|
YCbCrCoefficients = 0x0211 |
|
YCbCrSubSampling = 0x0212 |
|
YCbCrPositioning = 0x0213 |
|
ReferenceBlackWhite = 0x0214 |
|
XMLPacket = 0x02BC |
|
RelatedImageFileFormat = 0x1000 |
|
RelatedImageWidth = 0x1001 |
|
RelatedImageLength = 0x1002 |
|
Rating = 0x4746 |
|
RatingPercent = 0x4749 |
|
ImageID = 0x800D |
|
CFARepeatPatternDim = 0x828D |
|
BatteryLevel = 0x828F |
|
Copyright = 0x8298 |
|
ExposureTime = 0x829A |
|
FNumber = 0x829D |
|
IPTCNAA = 0x83BB |
|
ImageResources = 0x8649 |
|
ExifOffset = 0x8769 |
|
InterColorProfile = 0x8773 |
|
ExposureProgram = 0x8822 |
|
SpectralSensitivity = 0x8824 |
|
GPSInfo = 0x8825 |
|
ISOSpeedRatings = 0x8827 |
|
OECF = 0x8828 |
|
Interlace = 0x8829 |
|
TimeZoneOffset = 0x882A |
|
SelfTimerMode = 0x882B |
|
SensitivityType = 0x8830 |
|
StandardOutputSensitivity = 0x8831 |
|
RecommendedExposureIndex = 0x8832 |
|
ISOSpeed = 0x8833 |
|
ISOSpeedLatitudeyyy = 0x8834 |
|
ISOSpeedLatitudezzz = 0x8835 |
|
ExifVersion = 0x9000 |
|
DateTimeOriginal = 0x9003 |
|
DateTimeDigitized = 0x9004 |
|
OffsetTime = 0x9010 |
|
OffsetTimeOriginal = 0x9011 |
|
OffsetTimeDigitized = 0x9012 |
|
ComponentsConfiguration = 0x9101 |
|
CompressedBitsPerPixel = 0x9102 |
|
ShutterSpeedValue = 0x9201 |
|
ApertureValue = 0x9202 |
|
BrightnessValue = 0x9203 |
|
ExposureBiasValue = 0x9204 |
|
MaxApertureValue = 0x9205 |
|
SubjectDistance = 0x9206 |
|
MeteringMode = 0x9207 |
|
LightSource = 0x9208 |
|
Flash = 0x9209 |
|
FocalLength = 0x920A |
|
Noise = 0x920D |
|
ImageNumber = 0x9211 |
|
SecurityClassification = 0x9212 |
|
ImageHistory = 0x9213 |
|
TIFFEPStandardID = 0x9216 |
|
MakerNote = 0x927C |
|
UserComment = 0x9286 |
|
SubsecTime = 0x9290 |
|
SubsecTimeOriginal = 0x9291 |
|
SubsecTimeDigitized = 0x9292 |
|
AmbientTemperature = 0x9400 |
|
Humidity = 0x9401 |
|
Pressure = 0x9402 |
|
WaterDepth = 0x9403 |
|
Acceleration = 0x9404 |
|
CameraElevationAngle = 0x9405 |
|
XPTitle = 0x9C9B |
|
XPComment = 0x9C9C |
|
XPAuthor = 0x9C9D |
|
XPKeywords = 0x9C9E |
|
XPSubject = 0x9C9F |
|
FlashPixVersion = 0xA000 |
|
ColorSpace = 0xA001 |
|
ExifImageWidth = 0xA002 |
|
ExifImageHeight = 0xA003 |
|
RelatedSoundFile = 0xA004 |
|
ExifInteroperabilityOffset = 0xA005 |
|
FlashEnergy = 0xA20B |
|
SpatialFrequencyResponse = 0xA20C |
|
FocalPlaneXResolution = 0xA20E |
|
FocalPlaneYResolution = 0xA20F |
|
FocalPlaneResolutionUnit = 0xA210 |
|
SubjectLocation = 0xA214 |
|
ExposureIndex = 0xA215 |
|
SensingMethod = 0xA217 |
|
FileSource = 0xA300 |
|
SceneType = 0xA301 |
|
CFAPattern = 0xA302 |
|
CustomRendered = 0xA401 |
|
ExposureMode = 0xA402 |
|
WhiteBalance = 0xA403 |
|
DigitalZoomRatio = 0xA404 |
|
FocalLengthIn35mmFilm = 0xA405 |
|
SceneCaptureType = 0xA406 |
|
GainControl = 0xA407 |
|
Contrast = 0xA408 |
|
Saturation = 0xA409 |
|
Sharpness = 0xA40A |
|
DeviceSettingDescription = 0xA40B |
|
SubjectDistanceRange = 0xA40C |
|
ImageUniqueID = 0xA420 |
|
CameraOwnerName = 0xA430 |
|
BodySerialNumber = 0xA431 |
|
LensSpecification = 0xA432 |
|
LensMake = 0xA433 |
|
LensModel = 0xA434 |
|
LensSerialNumber = 0xA435 |
|
CompositeImage = 0xA460 |
|
CompositeImageCount = 0xA461 |
|
CompositeImageExposureTimes = 0xA462 |
|
Gamma = 0xA500 |
|
PrintImageMatching = 0xC4A5 |
|
DNGVersion = 0xC612 |
|
DNGBackwardVersion = 0xC613 |
|
UniqueCameraModel = 0xC614 |
|
LocalizedCameraModel = 0xC615 |
|
CFAPlaneColor = 0xC616 |
|
CFALayout = 0xC617 |
|
LinearizationTable = 0xC618 |
|
BlackLevelRepeatDim = 0xC619 |
|
BlackLevel = 0xC61A |
|
BlackLevelDeltaH = 0xC61B |
|
BlackLevelDeltaV = 0xC61C |
|
WhiteLevel = 0xC61D |
|
DefaultScale = 0xC61E |
|
DefaultCropOrigin = 0xC61F |
|
DefaultCropSize = 0xC620 |
|
ColorMatrix1 = 0xC621 |
|
ColorMatrix2 = 0xC622 |
|
CameraCalibration1 = 0xC623 |
|
CameraCalibration2 = 0xC624 |
|
ReductionMatrix1 = 0xC625 |
|
ReductionMatrix2 = 0xC626 |
|
AnalogBalance = 0xC627 |
|
AsShotNeutral = 0xC628 |
|
AsShotWhiteXY = 0xC629 |
|
BaselineExposure = 0xC62A |
|
BaselineNoise = 0xC62B |
|
BaselineSharpness = 0xC62C |
|
BayerGreenSplit = 0xC62D |
|
LinearResponseLimit = 0xC62E |
|
CameraSerialNumber = 0xC62F |
|
LensInfo = 0xC630 |
|
ChromaBlurRadius = 0xC631 |
|
AntiAliasStrength = 0xC632 |
|
ShadowScale = 0xC633 |
|
DNGPrivateData = 0xC634 |
|
MakerNoteSafety = 0xC635 |
|
CalibrationIlluminant1 = 0xC65A |
|
CalibrationIlluminant2 = 0xC65B |
|
BestQualityScale = 0xC65C |
|
RawDataUniqueID = 0xC65D |
|
OriginalRawFileName = 0xC68B |
|
OriginalRawFileData = 0xC68C |
|
ActiveArea = 0xC68D |
|
MaskedAreas = 0xC68E |
|
AsShotICCProfile = 0xC68F |
|
AsShotPreProfileMatrix = 0xC690 |
|
CurrentICCProfile = 0xC691 |
|
CurrentPreProfileMatrix = 0xC692 |
|
ColorimetricReference = 0xC6BF |
|
CameraCalibrationSignature = 0xC6F3 |
|
ProfileCalibrationSignature = 0xC6F4 |
|
AsShotProfileName = 0xC6F6 |
|
NoiseReductionApplied = 0xC6F7 |
|
ProfileName = 0xC6F8 |
|
ProfileHueSatMapDims = 0xC6F9 |
|
ProfileHueSatMapData1 = 0xC6FA |
|
ProfileHueSatMapData2 = 0xC6FB |
|
ProfileToneCurve = 0xC6FC |
|
ProfileEmbedPolicy = 0xC6FD |
|
ProfileCopyright = 0xC6FE |
|
ForwardMatrix1 = 0xC714 |
|
ForwardMatrix2 = 0xC715 |
|
PreviewApplicationName = 0xC716 |
|
PreviewApplicationVersion = 0xC717 |
|
PreviewSettingsName = 0xC718 |
|
PreviewSettingsDigest = 0xC719 |
|
PreviewColorSpace = 0xC71A |
|
PreviewDateTime = 0xC71B |
|
RawImageDigest = 0xC71C |
|
OriginalRawFileDigest = 0xC71D |
|
SubTileBlockSize = 0xC71E |
|
RowInterleaveFactor = 0xC71F |
|
ProfileLookTableDims = 0xC725 |
|
ProfileLookTableData = 0xC726 |
|
OpcodeList1 = 0xC740 |
|
OpcodeList2 = 0xC741 |
|
OpcodeList3 = 0xC74E |
|
NoiseProfile = 0xC761 |
|
|
|
|
|
"""Maps EXIF tags to tag names.""" |
|
TAGS = { |
|
**{i.value: i.name for i in Base}, |
|
0x920C: "SpatialFrequencyResponse", |
|
0x9214: "SubjectLocation", |
|
0x9215: "ExposureIndex", |
|
0x828E: "CFAPattern", |
|
0x920B: "FlashEnergy", |
|
0x9216: "TIFF/EPStandardID", |
|
} |
|
|
|
|
|
class GPS(IntEnum): |
|
GPSVersionID = 0 |
|
GPSLatitudeRef = 1 |
|
GPSLatitude = 2 |
|
GPSLongitudeRef = 3 |
|
GPSLongitude = 4 |
|
GPSAltitudeRef = 5 |
|
GPSAltitude = 6 |
|
GPSTimeStamp = 7 |
|
GPSSatellites = 8 |
|
GPSStatus = 9 |
|
GPSMeasureMode = 10 |
|
GPSDOP = 11 |
|
GPSSpeedRef = 12 |
|
GPSSpeed = 13 |
|
GPSTrackRef = 14 |
|
GPSTrack = 15 |
|
GPSImgDirectionRef = 16 |
|
GPSImgDirection = 17 |
|
GPSMapDatum = 18 |
|
GPSDestLatitudeRef = 19 |
|
GPSDestLatitude = 20 |
|
GPSDestLongitudeRef = 21 |
|
GPSDestLongitude = 22 |
|
GPSDestBearingRef = 23 |
|
GPSDestBearing = 24 |
|
GPSDestDistanceRef = 25 |
|
GPSDestDistance = 26 |
|
GPSProcessingMethod = 27 |
|
GPSAreaInformation = 28 |
|
GPSDateStamp = 29 |
|
GPSDifferential = 30 |
|
GPSHPositioningError = 31 |
|
|
|
|
|
"""Maps EXIF GPS tags to tag names.""" |
|
GPSTAGS = {i.value: i.name for i in GPS} |
|
|
|
|
|
class Interop(IntEnum): |
|
InteropIndex = 1 |
|
InteropVersion = 2 |
|
RelatedImageFileFormat = 4096 |
|
RelatedImageWidth = 4097 |
|
RleatedImageHeight = 4098 |
|
|
|
|
|
class IFD(IntEnum): |
|
Exif = 34665 |
|
GPSInfo = 34853 |
|
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 |
|
|