Image:...agLists(3pm)

πŸ“¦
version 0.159 Β· 2 versions
  • 0.159 Β· debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking (latest)
  • 0.153 Β· ubuntu jammy
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

✨ NAME ✨

Image::MetaData::JPEG::TagLists(3pm) β€” a whole collection of tag tables for JPEG segments, bestie. That's the vibe. πŸ’–

🌸 OVERVIEW 🌸

This doc is literally a collection of tag tables for JPEG segments. It's an appendix to the main manual page of the Image::MetaData::JPEG module, so if you need further details and the general scope, go read that one first, okay? ✨

πŸŽ€ Valid tags for Exif APP1 data πŸŽ€

The Japan Electronics and Information Technology Industries Association (JEITA) set up a standard for an exchange format for digital still cameras pictures, known as Exif. This standard defines a structure for embedding meta-data in a JPEG picture, to be written in the APP1 segment. The generalities and the reference documents about this structure are introduced in the Structure appendix; this section and its subsections list the valid interoperability record tags as well as their format. πŸ‘‘

πŸ¦‹ Canonical Exif 2.2 and TIFF 6.0 tags for IFD0 and IFD1 πŸ¦‹

In general, IFD0 and IFD1 can host tags from the same set. These tags are divided in three categories: canonical, additional and registered to companies. The tags listed in the following table are to be considered canonical; they are described at length in the Exif standard document, and can be found both in the IFD0 and in the IFD1 (some of them, in fact, must be present in both directories). The 'class' column carries the tag class; possible values are: A (image data structure), B (offsets), C (image data characteristics), D (other tags) and P (pointers to other IFDs). The two following columns show tag hexadecimal codes and names. The 'type' column specifies the (always unsigned) tag type: I (short or long), S (short), L (long), R (rational) and A (ASCII, always null terminated). The 'count' column obviously carries the tag count (- for a variable count, either because it is a variable length string or because it depends on other tags).

The 'IFD0' and 'IFD1' columns specify the support level in the respective directory; each column comprises four letters, because both the primary image (IFD0) and the thumbnail (IFD1) can come in four varieties (uncompressed chunky, uncompressed planar, uncompressed YCC and JPEG compressed). This module currently focuses only on JPEG pictures (not TIFF), so only the fourth letter of the 'IFD0' column is interesting, but note that the thumbnail of a JPEG image can be uncompressed. The support level codes stand for: M (mandatory), R (recommended), O (optional), N (not_recorded) and J (included in JPEG marker and so not recorded).

The 'thumbnail-only' column shows a T for those records which cannot be set/changed by the user exception made during a thumbnail update action (and some of them are calculated automatically anyway). Note that, in some cases, it is possible to set a tag when its support level is 'N' (e.g., the YCbCr stuff in IFD1): picture displaying programs should however simply ignore it. Some other tags, concerning offsets or thumbnail specific information, cannot be set by the module user (they are calculated automatically, more reliably): these are marked by calculated in the notes, or by a T in the thumbnail-only column.

Okay, tag table time, bestie. One bullet per tag, all the deets:

  • A 100 ImageWidth β€” type I, count 1, IFD0 MMMJ, IFD1 MMMJ, thumbnail-only T (not JPEG), notes: pixels/row.
  • A 101 ImageLength β€” type I, count 1, IFD0 MMMJ, IFD1 MMMJ, thumbnail-only T (not JPEG), notes: num. rows.
  • A 102 BitsPerSample β€” type S, count 3, IFD0 MMMJ, IFD1 MMMJ, thumbnail-only T (not JPEG), notes: 8,8,8.
  • A 103 Compression β€” type S, count 1, IFD0 MMMJ, IFD1 MMMM, thumbnail-only T, notes: 1(uncompr.) or 6(JPEG).
  • A 106 PhotometricInterpretation β€” type S, count 1, IFD0 MMMN, IFD1 MMMJ, notes: 2(RGB) or 6(YCbCr).
  • D 10e ImageDescription β€” type A, count -, IFD0 RRRR, IFD1 OOOO, notes: (see note 1).
  • D 10f Make β€” type A, count -, IFD0 RRRR, IFD1 OOOO, notes: camera manufacturer.
  • D 110 Model β€” type A, count -, IFD0 RRRR, IFD1 OOOO, notes: camera model.
  • B 111 StripOffsets β€” type I, count -, IFD0 MMMN, IFD1 MMMN, notes: calculated.
  • A 112 Orientation β€” type S, count 1, IFD0 RRRR, IFD1 OOOO, notes: (see note 2).
  • A 115 SamplesPerPixel β€” type S, count 1, IFD0 MMMJ, IFD1 MMMJ, thumbnail-only T (not JPEG), notes: 3 compon..
  • B 116 RowsPerStrip β€” type I, count 1, IFD0 MMMN, IFD1 MMMN, thumbnail-only T (not JPEG).
  • B 117 StripByteCounts β€” type I, count -, IFD0 MMMN, IFD1 MMMN, thumbnail-only T (not JPEG).
  • A 11a XResolution β€” type R, count 1, IFD0 MMMM, IFD1 MMMM, notes: (see note 3).
  • A 11b YResolution β€” type R, count 1, IFD0 MMMM, IFD1 MMMM, notes: (see note 3).
  • A 11c PlanarConfiguration β€” type S, count 1, IFD0 OMOJ, IFD1 OMOJ, notes: (see note 4).
  • A 128 ResolutionUnit β€” type S, count 1, IFD0 MMMM, IFD1 MMMM, notes: (see note 3).
  • C 12d TransferFunction β€” type S, count 768, IFD0 RRRR, IFD1 OOOO, notes: (see note 5).
  • D 131 Software β€” type A, count -, IFD0 OOOO, IFD1 OOOO, notes: Exif software/firmware.
  • D 132 DateTime β€” type A, count 20, IFD0 RRRR, IFD1 OOOO, notes: (see note 6).
  • D 13b Artist β€” type A, count -, IFD0 OOOO, IFD1 OOOO, notes: owner/photogr./creator.
  • C 13e WhitePoint β€” type R, count 2, IFD0 OOOO, IFD1 OOOO, notes: (see note 5).
  • C 13f PrimaryChromaticities β€” type R, count 6, IFD0 OOOO, IFD1 OOOO, notes: (see note 5).
  • B 201 JPEGInterchangeFormat β€” type L, count 1, IFD0 NNNN, IFD1 NNNM, notes: calculated.
  • B 202 JPEGInterchangeFormatLength β€” type L, count 1, IFD0 NNNN, IFD1 NNNM, thumbnail-only T (only JPEG).
  • C 211 YCbCrCoefficients β€” type R, count 3, IFD0 NNOO, IFD1 NNOO, notes: (see note 7).
  • A 212 YCbCrSubSampling β€” type S, count 2, IFD0 NNMJ, IFD1 NNMJ, notes: (see note 7).
  • A 213 YCbCrPositioning β€” type S, count 1, IFD0 NNMM, IFD1 NNOO, notes: (see note 7).
  • C 214 ReferenceBlackWhite β€” type R, count 6, IFD0 OOOO, IFD1 OOOO, notes: (see note 8).
  • D 8298 Copyright β€” type A, count -, IFD0 OOOO, IFD1 OOOO, notes: of photogr./editor.
  • P 8769 ExifOffset β€” type L, count 1, IFD0 MMMM, IFD1 OOOO, notes: calculated.
  • P 8825 GPSInfo β€” type L, count 1, IFD0 OOOO, IFD1 OOOO, notes: calculated.

πŸ“ Notes, bestie πŸ“

  1. The image description is a string containing a title or a comment for the image and all characters must be one byte long. When a two-byte code is necessary, the Exif Private tag UserComment is to be used (see L</Exif tags for the 0th IFD Exif private subdirectory>).
  2. The image orientation is defined with respect to first row and the first column, according to the following table (values not listed here are reserved and should not be used); the default value is 1.
    • 1 β€” 0th row top, 0th column left
    • 2 β€” 0th row top, 0th column right
    • 3 β€” 0th row bottom, 0th column right
    • 4 β€” 0th row bottom, 0th column left
    • 5 β€” 0th row left, 0th column top
    • 6 β€” 0th row right, 0th column top
    • 7 β€” 0th row right, 0th column bottom
    • 8 β€” 0th row left, 0th column bottom
  3. The XResolution and YResolution tags indicate the number of pixels per resolution unit (given by the ResolutionUnit tag) along the image width or height respectively. The resolution unit can be only 2 (inches) or 3 (centimetres), all other values being reserved. When the resolution is not set, a value of 72 dots/inch is assumed.
  4. This indicates whether pixel components are recorded in chunky (1, default) or planar (2) format (only for TIFF images; JPEG compressed files use a JPEG marker instead); all other values are reserved.
  5. TransferFunction, WhitePoint and PrimaryChromaticities specify, respectively, a transfer function for the image in tabular style (3*256 short integers), the chromaticity of the white point, and the chromaticity of the three primary colours of the image. Normally these tags are not necessary, since the colour space is specified in the ColorSpace L<private Exif tag|/Exif tags for the 0th IFD Exif private subdirectory>.
  6. This tag indicates the time of the "image creation" (i.e., the time the file was last changed). The tag value is a null terminated string of the form "YYYY:MM:DD HH:MM:SS" (note the space in the middle and the colon signs), in 24-hour format. If the tag is set, but the value is not meaningful, all numbers should be set to spaces (replacing also the colons with spaces is permitted too). See also DateTimeOriginal and DateTimeDigitized in the SubIFD L<section|/Exif tags for the 0th IFD Exif private subdirectory>. [Currently, only years after 1800 can be set with this Perl module].
  7. Digital images are often displayed on RGB devices, but recorded data can be saved in a YCbCr colour space because of the JPEG compression. The Exif standard provides three tags for translating one space into the other (see the sYCC IEC standard for more details). YCbCrSubSampling is the sampling ratio of the chrominance components in relation to the luminance component; its value can be only [2, 1] (for YCbCr 4:2:2) or [2, 2] (for YCbCr 4:2:0). In JPEG compressed data a JPEG marker is used instead of this tag. YCbCrPositioning is the position of the chrominance components in relation to the luminance component, and is meaningful only for JPEG compressed data or uncompressed YCbCr data; its value can be only 1 (centred, default) or 2 (co-sited). YCbCrCoefficients contains the matrix coefficients for the transformation from RGB to YCbCr image data.
  8. This tags contains the reference values for the black and white points of the image. No defaults are given in the TIFF standard, but Exif assumes the following values: [0, 255, 0, 255, 0, 255] (when PhotometricInterpretation is RGB) or [0, 255, 0, 128, 0, 128] (when PhotometricInterpretation is YCbCr).

🌈 Additional TIFF 6.0 tags not in Exif 2.2 for IFD0 🌈

The tags listed in the following table are present in the TIFF 6.0 standard and not in the Exif 2.2 standard. They are presented here just for reference, since some digital cameras or programs still include them, incorrectly, in the IFD0 (they are not present in IFD1, I assume). The 'class' column carries the tag class; possible values are: a (TIFF 6.0 tags for baseline TIFFs not in Exif 2.2), b (extensions to TIFF 6.0 specs not in Exif 2.2) and - (updates and corrections to TIFF 6.0). The two following columns show tag hexadecimal codes and names. The 'type' column specifies the tag type: i (byte or short), I (short or long), B (byte), S (short), L (long), R (rational), F (floating point numbers), D (double precision floating point numbers), - (unspecified, best fit) and A (ASCII, always null terminated). The 'count' column obviously carries the tag count (- that it is variable, either because it is a variable length string or because it depends on other tags).

okay bestie we're BACK and we are picking up mid-table like it's nothing 😀 no re-intro, no warm-up, just straight into the hex. class column first, then the tag, then type + count + why anybody cares. locked in πŸ’…

  • class a Β· fe NewSubfileType β€” type L, count 1 Β· TIFFs can hold multiple images
  • class a Β· ff SubFileType β€” type S, count 1 Β· TIFFs can hold multiple images
  • class a Β· 107 Thresholding β€” type S, count 1 Β· for Graylevel to Black&White
  • class a Β· 108 CellWidth β€” type S, count 1 Β· halftoning matrix support
  • class a Β· 109 CellLength β€” type S, count 1 Β· halftoning matrix support
  • class a Β· 10a FillOrder β€” type S, count 1 Β· bits' logical order in a byte
  • class b Β· 10d DocumentName β€” type A, count - Β· document storage and retrieval
  • class a Β· 118 MinSampleValue β€” type S, count - Β· only for statistical purposes
  • class a Β· 119 MaxSampleValue β€” type S, count - Β· only for statistical purposes
  • class b Β· 11d PageName β€” type A, count - Β· document storage and retrieval
  • class b Β· 11e XPosition β€” type R, count 1 Β· document storage and retrieval
  • class b Β· 11f YPosition β€” type R, count 1 Β· document storage and retrieval
  • class a Β· 120 FreeOffsets β€” type L, count - Β· not recommended for interchange
  • class a Β· 121 FreeByteCounts β€” type L, count - Β· not recommended for interchange
  • class a Β· 122 GrayResponseUnit β€” type S, count 1 Β· for gray-scale images
  • class a Β· 123 GrayResponseCurve β€” type S, count - Β· for gray-scale images
  • class b Β· 124 T4Options β€” type L, count 1 Β· (group 3 options)
  • class b Β· 125 T6Options β€” type L, count 1 Β· (group 4 options)
  • class b Β· 129 PageNumber β€” type S, count 2 Β· document storage and retrieval
  • class - Β· 12c ColorResponseUnit β€” type S, count 1 Β· [obsoleted in TIFF 6.0]
  • class a Β· 13c HostComputer β€” type A, count - Β· computer/OS used for creation
  • class b Β· 13d Predictor β€” type S, count 1 Β· differencing predictor
  • class a Β· 140 Colormap β€” type S, count - Β· RGB colour map
  • class b Β· 141 HalftoneHints β€” type S, count 2 Β· half tone hints
  • class b Β· 142 TileWidth β€” type I, count 1 Β· tiled images
  • class b Β· 143 TileLength β€” type I, count 1 Β· tiled images
  • class b Β· 144 TileOffsets β€” type L, count - Β· tiled images
  • class b Β· 145 TileByteCounts β€” type I, count - Β· tiled images
  • class - Β· 146 BadFaxLines β€” type I, count 1 Β· [TIFF class F draft]
  • class - Β· 147 CleanFaxData β€” type S, count 1 Β· [TIFF class F draft]
  • class - Β· 148 ConsecutiveBadFaxLines β€” type I, count 1 Β· [TIFF class F draft]
  • class - Β· 14a SubIFDs β€” type L, count - Β· [Adobe TIFF technote 1]
  • class b Β· 14c InkSet β€” type S, count 1 Β· CMYK images
  • class b Β· 14d InkNames β€” type A, count - Β· CMYK images
  • class b Β· 14e NumberOfInks β€” type S, count 1 Β· CMYK images
  • class b Β· 150 DotRange β€” type i, count - Β· CMYK images
  • class b Β· 151 TargetPrinter β€” type A, count - Β· CMYK images
  • class a Β· 152 ExtraSamples β€” type S, count - Β· pixel extra components
  • class b Β· 153 SampleFormats β€” type S, count - Β· data sample format
  • class b Β· 154 SMinSampleValue β€” type -, count - Β· data sample format
  • class b Β· 155 SMaxSampleValue β€” type -, count - Β· data sample format
  • class b Β· 156 TransferRange β€” type S, count 6 Β· image colourimetry
  • class - Β· 157 ClipPath β€” type B, count - Β· [Adobe TIFF technote 2]
  • class - Β· 158 XClipPathUnits β€” type D, count 1 Β· [Adobe TIFF technote 2]
  • class - Β· 159 YClipPathUnits β€” type D, count 1 Β· [Adobe TIFF technote 2]
  • class - Β· 15a Indexed β€” type S, count 1 Β· [Adobe TIFF technote 3]
  • class - Β· 15b JPEGTables β€” type -, count - Β· [update (1995) for JPEG-in-TIFF]
  • class - Β· 15f OPIProxy β€” type S, count 1 Β· [Adobe TIFF technote (OPI)]
  • class b Β· 200 JPEGProc β€” type S, count 1 Β· JPEG support
  • class b Β· 203 JPEGRestartInterval β€” type S, count 1 Β· JPEG support
  • class b Β· 205 JPEGLosslessPredictors β€” type S, count - Β· JPEG support
  • class b Β· 206 JPEGPointTransforms β€” type S, count - Β· JPEG support
  • class b Β· 207 JPEGQTables β€” type L, count - Β· JPEG support
  • class b Β· 208 JPEGDCTables β€” type L, count - Β· JPEG support
  • class b Β· 209 JPEGACTables β€” type L, count - Β· JPEG support
  • class - Β· 2bc XML_Packet β€” type B, count - Β· [Adobe XMP technote 9-14-02]

and that's the WHOLE table, we ate, zero crumbs left 🌈


✨ Exif tags assigned to companies for IFD0 and IFD1 ✨

okay so this next batch is giving ✨corporate✨ energy, because every single tag in the table below has a value bigger than 0x8000, like, 32000 and up. These were requested by individual companies and handed out to them by the TIFF committee. well… at least that's what I think, because getting an official list for these tags is genuinely so hard 😭 so pls treat them as being at the level of "rumours". This list also has some TIFF/IT tags from ISO 12639 and some TIFF/EP tags from ISO 12234 in it (the private Exif tags in JPEG APP1 originally came from TIFF/EP, so the two overlap a LOT β€” and any TIFF/EP tags that are also Exif tags are simply not listed here). no cap. 🫢

  • 800d ImageID β€” type A, count - Β· [Adobe TIFF technote (OPI)]
  • 80b9 RefPts β€” type ?, count ? Β· [Island Graphics]
  • 80ba RegionTackPoint β€” type ?, count ? Β· [Island Graphics]
  • 80bb RegionWarpCorners β€” type ?, count ? Β· [Island Graphics]
  • 80bc RegionAffine β€” type ?, count ? Β· [Island Graphics]
  • 80e3 Matteing β€” type S, count 1 Β· [SGI (obsoleted by ExtraSamples)]
  • 80e4 DataType β€” type S, count - Β· [SGI (obsoleted by SampleFormat)]
  • 80e5 ImageDepth β€” type I, count 1 Β· [SGI (z dimension)]
  • 80e6 TileDepth β€” type I, count 1 Β· [SGI (subvolume tiling)]
  • 8214 ImageFullWidth β€” type L, count 1 Β· [Pixar (cropped images)]
  • 8215 ImageFullLength β€” type L, count 1 Β· [Pixar (cropped images)]
  • 8216 TextureFormat β€” type A, count - Β· [Pixar (texture formats)]
  • 8217 WrapModes β€” type A, count - Β· [Pixar (texture formats)]
  • 8218 FovCot β€” type F, count 1 Β· [Pixar (texture formats)]
  • 8219 MatrixWorldToScreen β€” type F, count 16 Β· [Pixar (texture formats)]
  • 821a MatrixWorldToCamera β€” type F, count 16 Β· [Pixar (texture formats)]
  • 827d WriterSerialNumber β€” type ?, count ? Β· [Eastman Kodak (device serial number)]
  • 828d CFARepeatPatternDim β€” type S, count 2 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 828e CFAPattern β€” type B, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 828f BatteryLevel β€” type RA, count 1- Β· [ISO/DIS 12234-2 TIFF/EP]
  • 830e ModelPixelScaleTag β€” type D, count 3 Β· [SoftDesk (GeoTIFF)]
  • 83bb IPTC/NAA β€” type LA, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 8480 IntergraphMatrixTag β€” type D, count 16 Β· [Intergraph, deprecated (GeoTIFF)]
  • 8482 ModelTiepointTag β€” type D, count - Β· [Intergraph, aka Georef.Tag (GeoTIFF)]
  • 84e0 Site β€” type A, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84e1 ColorSequence β€” type A, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84e2 IT8Header β€” type A, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84e3 RasterPadding β€” type S, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84e4 BitsPerRunLength β€” type S, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84e5 BitsPerExtendedRunLength β€” type S, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84e6 ColorTable β€” type B, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84e7 ImageColorIndicator β€” type B, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84e8 BackgroundColorIndicator β€” type B, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84e9 ImageColorValue β€” type B, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84ea BackgroundColorValue β€” type B, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84eb PixelIntensityRange β€” type B, count 2 Β· [ISO/DIS 12639 TIFF/IT]
  • 84ec TransparencyIndicator β€” type B, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84ed ColorCharacterization β€” type A, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84ee HCUsage β€” type L, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84ef TrapIndicator β€” type B, count 1 Β· [ISO/DIS 12639 TIFF/IT]
  • 84f0 CMYKEquivalent β€” type i, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84f1 Reserved_TIFF_IT_1 β€” type -, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84f2 Reserved_TIFF_IT_2 β€” type -, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 84f3 Reserved_TIFF_IT_3 β€” type -, count - Β· [ISO/DIS 12639 TIFF/IT]
  • 85b8 FrameCount β€” type L, count 1 Β· [Texas Instruments (Sequence Count)]
  • 85d8 ModelTransformationTag β€” type D, count 16 Β· [JPL Cartogr. App. Group (GeoTIFF)]
  • 8649 PhotoshopImageResources β€” type B, count ? Β· [Adobe (Photoshop)]
  • 8773 ICCProfile β€” type -, count - Β· [Inter Colour Consortium (TIFF/IT)]
  • 87af GeoKeyDirectoryTag β€” type S, count - Β· [SPOT Image Inc. (GeoTIFF)]
  • 87b0 GeoDoubleParamsTag β€” type D, count - Β· [SPOT Image Inc. (GeoTIFF)]
  • 87b1 GeoAsciiParamsTag β€” type A, count - Β· [SPOT Image Inc. (GeoTIFF)]
  • 87be JBIGOptions β€” type ?, count ? Β· [Pixel Magic]
  • 8829 Interlace β€” type S, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 882a TimeZoneOffset β€” type SS, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 882b SelfTimerMode β€” type S, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 885c FaxRecvParams β€” type L, count 1 Β· [SGI (fax support)]
  • 885d FaxSubAddress β€” type A, count - Β· [SGI (fax support)]
  • 885e FaxRecvTime β€” type L, count 1 Β· [SGI (fax support)]
  • 8871 FedExEDR β€” type ?, count ? Β· [FedEx]
  • 920b FlashEnergy β€” type R, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 920c SpatialFrequencyResponse β€” type -, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 920d Noise β€” type -, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 920e FocalPlaneXResolution β€” type R, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 920f FocalPlaneYResolution β€” type R, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9210 FocalPlaneResolutionUnit β€” type S, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9211 ImageNumber β€” type L, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9212 SecurityClassification β€” type A, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9213 ImageHistory β€” type A, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9215 ExposureIndex β€” type R, count - Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9216 TIFF/EPStandardID β€” type B, count 4 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 9217 SensingMethod β€” type S, count 1 Β· [ISO/DIS 12234-2 TIFF/EP]
  • 923f StoNits β€” type D, count 1 Β· [SGI (LogLuv Encoding)]
  • 935c ImageSourceData β€” type -, count - Β· [Adobe Photoshop]
  • c4a5 PrintIM_Data β€” type ?, count ? Β· [Epson]
  • c44f PhotoshopAnnotations β€” type ?, count ? Β· [Adobe Photoshop]
  • ffff DCSHueShiftValues β€” type ?, count ? Β· [Eastman Kodak]

like… look at all these little corporate fingerprints, iconic honestly πŸ‘‘

and yes the ? types are literally ? in the source, that's not me being confused bestie, that's the actual data πŸ’€

lowkey obsessed with ffff being Eastman Kodak's whole thing. main character hex code fr fr 🌸

and we are NOT done, there's more coming so don't you dare close the tab πŸ¦‹

✨ Exif tags for the 0th IFD Exif private subdirectory ✨

okay bestie, so these tags? They're literally all the Exif 2.2 private tags β€” the ones that populate the 0th IFD SubIFD. The Exif standard document describes them at length (but also peep the non-standard Photoshop SubIFD tags at the end of this section, iykyk). The 'class' column? It's giving tag class energy. Possible values are: a (tags relating to version), b (image data characteristics), c (image configuration), d (user information), e (related file information), f (date and time), g (picture taking conditions) and h (other Exif 2.2 tags). The two following columns show tag hexadecimal codes and names. The 'type' column specifies the tag type: I (short or long), S (short), L (long), R (rational), SR (signed rational), U (undefined) and A (ASCII, always null terminated). The 'count' column obviously carries the tag count (- means that it is variable).

The 'SubIFD' column specifies the support level; it comprises four letters, because the primary image (IFD0) can come in four varieties (uncompressed chunky, uncompressed planar, uncompressed YCC and JPEG compressed). This module currently focuses only on JPEG pictures (not TIFF), so only the fourth letter is interesting. The support level codes stand for: M (mandatory), R (recommended), O (optional), and N (not recorded). Tags marked as 'calculated' in the notes must not be set by the module user, since they concern offsets and data types (which are calculated automatically, more reliably).

Now, the full tag table, one by one, no skips πŸ’…:

  • 829a ExposureTime β€” class g, type R, count 1, SubIFD RRRR β€” in seconds
  • 829d FNumber β€” class g, type R, count 1, SubIFD OOOO β€” (see note 1)
  • 8822 ExposureProgram β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0-8
  • 8824 SpectralSensitivity β€” class g, type A, count -, SubIFD OOOO β€” see ASTM technical committee
  • 8827 ISOSpeedRatings β€” class g, type S, count -, SubIFD OOOO β€” see ISO 12232
  • 8828 OECF β€” class g, type U, count -, SubIFD OOOO β€” see ISO 14524
  • 9000 ExifVersion β€” class a, type U, count 4, SubIFD MMMM β€” (see note 2)
  • 9003 DateTimeOriginal β€” class f, type A, count 20, SubIFD OOOO β€” (see note 3)
  • 9004 DateTimeDigitized β€” class f, type A, count 20, SubIFD OOOO β€” (see note 3)
  • 9101 ComponentsConfiguration β€” class c, type U, count 4, SubIFD NNNM β€” (see note 4)
  • 9102 CompressedBitsPerPixel β€” class c, type R, count 1, SubIFD NNNO β€” compression rate
  • 9201 ShutterSpeedValue β€” class g, type SR, count 1, SubIFD OOOO β€” (see note 1)
  • 9202 ApertureValue β€” class g, type R, count 1, SubIFD OOOO β€” (see note 1)
  • 9203 BrightnessValue β€” class g, type SR, count 1, SubIFD OOOO β€” (see note 1)
  • 9204 ExposureBiasValue β€” class g, type SR, count 1, SubIFD OOOO β€” (see note 1)
  • 9205 MaxApertureValue β€” class g, type R, count 1, SubIFD OOOO β€” smallest ApertureValue
  • 9206 SubjectDistance β€” class g, type R, count 1, SubIFD OOOO β€” in meters
  • 9207 MeteringMode β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0-6 and 255
  • 9208 LightSource β€” class g, type S, count 1, SubIFD OOOO β€” use 0-4,9-15,17-24 or 255
  • 9209 Flash β€” class g, type S, count 1, SubIFD RRRR β€” (see note 5)
  • 920a FocalLength β€” class g, type R, count 1, SubIFD OOOO β€” in millimetres
  • 9214 SubjectArea β€” class g, type S, count -, SubIFD OOOO β€” (see note 6)
  • 927c MakerNote β€” class d, type U, count -, SubIFD OOOO β€” calculated
  • 9286 UserComment β€” class d, type U, count -, SubIFD OOOO β€” (see note 7)
  • 9290 SubSecTime β€” class f, type A, count -, SubIFD OOOO β€” (see note 8)
  • 9291 SubSecTimeOriginal β€” class f, type A, count -, SubIFD OOOO β€” (see note 8)
  • 9292 SubSecTimeDigitized β€” class f, type A, count -, SubIFD OOOO β€” (see note 8)
  • a000 FlashpixVersion β€” class a, type U, count 4, SubIFD MMMM β€” (see note 2)
  • a001 ColorSpace β€” class b, type S, count 1, SubIFD MMMM β€” valid values are 1 and 65535
  • a002 PixelXDimension β€” class c, type I, count 1, SubIFD NNNM β€” picture X-dim, see note 9)
  • a003 PixelYDimension β€” class c, type I, count 1, SubIFD NNNM β€” picture Y-dim, see note 9)
  • a004 RelatedSoundFile β€” class e, type A, count 13, SubIFD OOOO β€” (see note 10)
  • a005 InteroperabilityOffset β€” class h, type L, count 1, SubIFD NNNO β€” calculated by the module
  • a20b FlashEnergy β€” class g, type R, count 1, SubIFD OOOO β€” in BCPS
  • a20c SpatialFrequencyResponse β€” class g, type U, count -, SubIFD OOOO β€” (see ISO 12233
  • a20e FocalPlaneXResolution β€” class g, type R, count 1, SubIFD OOOO β€” .
  • a20f FocalPlaneYResolution β€” class g, type R, count 1, SubIFD OOOO β€” .
  • a210 FocalPlaneResolutionUnit β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 2 and 3
  • a214 SubjectLocation β€” class g, type S, count 2, SubIFD OOOO β€” in pixels
  • a215 ExposureIndex β€” class g, type R, count 1, SubIFD OOOO β€” .
  • a217 SensingMethod β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 1-5,7 and 8
  • a300 FileSource β€” class g, type U, count 1, SubIFD OOOO β€” only allowed value is 3
  • a301 SceneType β€” class g, type U, count 1, SubIFD OOOO β€” only allowed value is 1
  • a302 CFAPattern β€” class g, type U, count -, SubIFD OOOO β€” (see note 11)
  • a401 CustomRendered β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0 and 1
  • a402 ExposureMode β€” class g, type S, count 1, SubIFD RRRR β€” valid values are 0,1 and 2
  • a403 WhiteBalance β€” class g, type S, count 1, SubIFD RRRR β€” valid values are 0 and 1
  • a404 DigitalZoomRatio β€” class g, type R, count 1, SubIFD OOOO β€” .
  • a405 FocalLengthIn35mmFilm β€” class g, type S, count 1, SubIFD OOOO β€” .
  • a406 SceneCaptureType β€” class g, type S, count 1, SubIFD RRRR β€” valid values are 0,1,2 and 3
  • a407 GainControl β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0,1,2,3 & 4
  • a408 Contrast β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0,1 and 2
  • a409 Saturation β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0,1 and 2
  • a40a Sharpness β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0,1 and 2
  • a40b DeviceSettingDescription β€” class g, type U, count -, SubIFD OOOO β€” (see note 12)
  • a40c SubjectDistanceRange β€” class g, type S, count 1, SubIFD OOOO β€” valid values are 0,1,2 and 3
  • a420 ImageUniqueID β€” class h, type A, count 33, SubIFD OOOO β€” matches /[0-9a-fA-F]+\000+/

And that's every single tag, no cap. 🫢


πŸ“ Notes πŸ“

  1. Note 1 β€” The camera information in the Exif standard conforms to the APEX (Additive System of Photographic Exposure) unit system. APEX is a convenient unit for expressing exposure (Ev). The relation of APEX to other units is essentially as follows:
--------------------------------------------------------
ApertureValue     (Av) = 2 log2(FNumber)
ShutterSpeedValue (Tv) = - log2(ExposureTime)
BrightnessValue   (Bv) =   log2(Brightness) + constant
FilmSensitivity   (Sv) =   log2(ASA/3.125) [not in Exif]
Exposure          (Ev) = Av + Tv = Bv + Sv
--------------------------------------------------------
  1. Note 2 β€” A version tag is a sequence of four numerical characters representing the supported version of the standard (e.g., '0220' for version 2.2). Possible versions for Exif: 1.0, 1.1, 2.0, 2.1, 2.2 and 2.2.1. Possible versions for Flashpix: 1.0.
  2. Note 3 β€” These tags indicate the time of the original-image data generation and of its storage (hardly any difference, usually). Their value is a null terminated string of the form "YYYY:MM:DD HH:MM:SS" (note the space in the middle and the colon signs), in 24-hour format. If the tag is set, but the value is not meaningful, all numbers should be set to spaces (replacing also the colons with spaces is permitted too). See also 'DateTime' in the canonical tag L<section|/Canonical Exif 2.2 and TIFF 6.0 tags for IFD0 and IFD1>. [Currently, only years after 1800 can be set with this Perl module].
  3. Note 4 β€” This tag indicates the channels of each component, arranged in order from the 1st component to the 4th. For uncompressed data the data arrangement is given in the 'PhotometricInterpretation' tag. The four numeric characters must be in the range '0' - '6', and legal combinations are '4560' (if RGB uncompressed) and '1230' (all other cases).
  4. Note 5 β€” This tag indicates the status of flash when the image was shot. Bit 0 indicates the flash firing status, bits 1 and 2 indicate the flash return status, bits 3 and 4 indicate the flash mode, bit 5 indicates whether the flash function is present, and bit 6 indicates "red eye" mode. The allowed decimal values for the bit-mask are therefore 0, 1, 5, 7, 9, 13, 15, 16, 24, 25, 29, 31, 32, 65, 69, 71, 73, 77, 79, 89, 93 and 95.
  5. Note 6 β€” This tag indicates the location and area of the main subject in the overall scene. Count can be 2 (a spot defined by two coordinates), 3 (a circle defined by centre coordinates and diameter) and 4 (a rectangle defined by its centre coordinates and its dimensions).
  6. Note 7 β€” The 'UserComment' tag must start with an 8 byte "ID code", which can be "ASCII\00\00\00", "JIS\00\00\00\00\00", "Unicode" or eight null bytes for "undefined". The ID code identifies the character code to be used in the following. A null terminator is not required.
  7. Note 8 β€” A sub-second-time tag value represents a fraction of a second, relative to the 'DateTime' tag and other such tags, as an ASCII null-terminated string made of numeric characters; an arbitrary number of spaces can be appended to the numeric characters string. If sub-second data is not known the tag value may contain only spaces. The corresponding regular expression is /\d*\s*\000/.
  8. Note 9 β€” This is the valid width or height of the meaningful image (horizontal dimension does not include data padding). Overall image dimensions can be read in the SOF segment (this includes padding however).
  9. Note 10 β€” This tag is used to record the name of an audio file related to the image data: an ASCII string consisting of 8 characters + '.' + 3 characters, terminated by NULL. The path is not recorded. The corresponding regular expression is /\w{8}\.\w{3}\000/.
  10. Note 11 β€” This tag indicates the colour filter array (CFA) geometric pattern of the image sensor when a one-chip colour area sensor is used. The first four bytes must be interpreted as two shorts giving the horizontal (m) and vertical (n) repeat pixel units. Then, m x n bytes follow, giving the actual colour filter values (in the range 0-6).
  11. Note 12 β€” This tag indicates information on the picture-taking conditions of a particular camera model, for a reader. The first four bytes must be interpreted as two shorts giving the number of display rows and columns. The following bytes must be interpreted as Unicode (UCS-2) streams, NULL terminated and including the signature. The specifics of the Unicode string are as given in ISO/IEC 10464-1. An approximation to the corresponding regular expression is /.{4}(\376\377(.{2})*\000\000)*/.

And bestie, Adobe's Photoshop program? At least from version 7.0 on, it seems to add some non-standard tags to the Exif private tags subdirectory during the treatment of raw camera pictures. The corresponding record values are all ASCII strings ($ASCII type), and contain the description of the tags themselves. The following might be an incomplete list:

  • fde8 β€” _OwnerName β€” type A, count -, and the value begins with "Owner's Name: "
  • fde9 β€” _SerialNumber β€” type A, count -, value starts with "Serial Number: "
  • fdea β€” _Lens β€” type A, count -, value starts with "Lens: "
  • fe4c β€” _RawFile β€” type A, count -, value starts with "Raw File: "
  • fe4d β€” _Converter β€” type A, count -, value starts with "Converter: "
  • fe4e β€” _WhiteBalance β€” type A, count -, value starts with "White Balance: "
  • fe51 β€” _Exposure β€” type A, count -, value starts with "Exposure: "
  • fe52 β€” _Shadows β€” type A, count -, value starts with "Shadows: "
  • fe53 β€” _Brightness β€” type A, count -, value starts with "Brightness: "
  • fe54 β€” _Contrast β€” type A, count -, value starts with "Contrast: "
  • fe55 β€” _Saturation β€” type A, count -, value starts with "Saturation: "
  • fe56 β€” _Sharpness β€” type A, count -, value starts with "Sharpness: "
  • fe57 β€” _Smoothness β€” type A, count -, value starts with "Smoothness: "
  • fe58 β€” _MoireFilter β€” type A, count -, value starts with "Moire Filter: "
bestie just a reminder on how to read these, because the columns got a lil squished: hex code first, then the tag name, then type, then count (- means the count is variable, i.e. it's whatever), and then the string that the value begins with β€” and because these are all null terminated strings, the actual value gets a null-terminated string tacked onto the end. πŸ’…

✨ Exif tags for the 0th IFD Interoperability subdirectory ✨

So when the main image is compressed β€” and ngl, for a JPEG picture that's literally always β€” the "Design rule for Camera File system" recommendations say you should slide another IFD in below SubIFD, the Interoperability IFD, and the InteroperabilityOffset tag points at it. The legal tags live in the table below. First two columns are the tag hex codes and their names, periodt. The type column tells you the tag type: I (short or long), U (undefined), and A (ASCII, always null terminated). The count column obviously tells you the value count (- = it's variable). And the Index and Version tags are mandatory if the subIFD is present β€” but don't stress, this module adds them automatically if it needs to. 🫢

  • 0001 β€” InteroperabilityIndex β€” type A, count 4, SubIFD support NNNM, notes: R98 (THM would work for IFD1)
  • 0002 β€” InteroperabilityVersion β€” type U, count 4, SubIFD support NNNM, notes: e.g. '0100' means 1.00
  • 1000 β€” RelatedImageFileFormat β€” type A, count -, SubIFD support NNNO, notes: e.g. 'Exif JPEG Ver. 2.1'
  • 1001 β€” RelatedImageWidth β€” type I, count 1, SubIFD support NNNO, notes: image X dimension
  • 1002 β€” RelatedImageLength β€” type I, count 1, SubIFD support NNNO, notes: image Y dimension

✨ Exif tags for the 0th IFD GPS subdirectory ✨

These next ones are the GPS girlies 🌍 β€” they're used for GPS attributes in the GPS IFD, which gets pointed to (if it's there) by the GPSInfo tag in IFD0 or IFD1. This standard was already a thing back in TIFF/EP, and now it's part of Exif 2.2. First two columns = tag hex codes and names. The type column is the tag type: B (byte), S (short), R (rational), U (undefined), and A (ASCII, always null terminated). The count column obviously = the value count (- means variable, as always). All GPS tags are optional in a JPEG or TIFF file β€” but the VersionID tag has got to be present if the GPS IFD is present. (And yes, a default 'VersionID' = (2,2,0,0), i.e. v.2.2, gets automatically added by this module if necessary. iconic behaviour tbh.)

  • 00 β€” GPSVersionID β€” type B, count 4 β€” mandatory
  • 01 β€” GPSLatitudeRef β€” type A, count 2 β€” (see note 1)
  • 02 β€” GPSLatitude β€” type R, count 3 β€” (see note 2)
  • 03 β€” GPSLongitudeRef β€” type A, count 2 β€” (see note 1)
  • 04 β€” GPSLongitude β€” type R, count 3 β€” (see note 2)
  • 05 β€” GPSAltitudeRef β€” type B, count 1 β€” 0 (sea level) or 1 (absolute)
  • 06 β€” GPSAltitude β€” type R, count 1 β€” in metres
  • 07 β€” GPSTimeStamp β€” type R, count 3 β€” hours, minutes and seconds
  • 08 β€” GPSSatellites β€” type A, count - β€” satellites used for measurement
  • 09 β€” GPSStatus β€” type A, count 2 β€” 'A' (in progr.) or 'V' (interop.)
  • 0a β€” GPSMeasureMode β€” type A, count 2 β€” '2' (2-dim) or '3' (3-dim)
  • 0b β€” GPSDOP β€” type R, count 1 β€” data degree of precision
  • 0c β€” GPSSpeedRef β€” type A, count 2 β€” (see note 3)
  • 0d β€” GPSSpeed β€” type R, count 1 β€” speed of the GPS receiver
  • 0e β€” GPSTrackRef β€” type A, count 2 β€” (see note 4)
  • 0f β€” GPSTrack β€” type R, count 1 β€” (see note 5)
  • 10 β€” GPSImgDirectionRef β€” type A, count 2 β€” (see note 4)
  • 11 β€” GPSImgDirection β€” type R, count 1 β€” (see note 5)
  • 12 β€” GPSMapDatum β€” type A, count - β€” geodetic survey data
  • 13 β€” GPSDestLatitudeRef β€” type A, count 2 β€” (see note 1)
  • 14 β€” GPSDestLatitude β€” type R, count 3 β€” (see note 2)
  • 15 β€” GPSDestLongitudeRef β€” type A, count 2 β€” (see note 1)
  • 16 β€” GPSDestLongitude β€” type R, count 3 β€” (see note 2)
  • 17 β€” GPSDestBearingRef β€” type A, count 2 β€” (see note 4)
  • 18 β€” GPSDestBearing β€” type R, count 1 β€” (see note 5)
  • 19 β€” GPSDestDistanceRef β€” type A, count 2 β€” (see note 3)
  • 1a β€” GPSDestDistance β€” type R, count 1 β€” distance to the destination point
  • 1b β€” GPSProcessingMethod β€” type U, count - β€” location finding (see note 6)
  • 1c β€” GPSAreaInformation β€” type U, count - β€” name of the GPS area (see note 6)
  • 1d β€” GPSDateStamp β€” type A, count 11 β€” (see note 7)
  • 1e β€” GPSDifferential β€” type S, count 1 β€” 0 (without) or 1 (with) diff.corr.

πŸŽ€ Notes: πŸŽ€

  1. A latitude or longitude reference is basically setting the sign for another (related) latitude or longitude value tag. A latitude reference can only be 'N' (for North) or 'S' (for South); a longitude reference can only be 'E' (for East) or 'W' (for West). no in-between, she doesn't do ambiguity.
  2. A latitude or a longitude gets stored as a sequence of three rational numbers (and each rational number is the ratio of two unsigned long integers, fyi), standing for degrees, minutes and seconds. A typical format is (dd/1, mm/1, ss/1). Sometimes the seconds get dropped in favour of fractions of minutes (usually with two decimal places); in that case the format is (dd/1, mmmm/100, 0/1). Latitudes are limited to the interval [0,90], while longitudes are limited to [0,180].
  3. A "speed (distance) reference" is the unit for the speed (distance) value stored in another (related) tag. The only allowed values are 'K' (for Km/h or Km), 'M' (for miles/h or miles) or 'N' (knots). And can we just appreciate the fact that knot in English is both a unit of speed (one nautical mile per hour) and of distance (one nautical mile). the language ate that one πŸ’€
  4. A direction reference says how you should interpret a following direction value. Only two references are possible: 'T' (for the true direction) or 'M' (for the magnetic direction).
  5. A direction (of the pointed image, of the movement of the GPS receiver, ecc ...) is a decimal number specifying an angle. The allowed range is between 0.00 and 359.99.
  6. The processing method and the area information are character strings, and their first character specifies the character code being used β€” it's the first character of the 8-byte character code identification in the 'UserComment' tag in the SubIFD. So 'A' means ASCII, 'J' means JIS, 'U' means Unicode, and a null character means undefined. And since the type is not ASCII, null termination is not required here.
  7. A date tag value is a null terminated string of the form "YYYY:MM:DD" (note the colon signs, bestie, colons not dashes). [I currently allow only years after 1800].

✨ Valid tags for Photoshop-style APP13 data ✨

The structure of a Photoshop-style APP13 segment gets introduced over in section "Structure of a Photoshop-style APP13 segment" in Image::MetaData::JPEG::Structures. go read that if you want the full lore πŸ¦‹

Non-IPTC data (visual rendering - Photoshop variables)

This section contains only the list of valid Image Resource ID's β€” and heads up, not all file formats use all ID's, and some information may be stored somewhere else in the file entirely. In the following list, 'PS' stands for Photoshop, and 'Pstring' for Pascal string:

...and the hex codes keep going, bestie, don't panic, we're almost at the end of the Photoshop list πŸ’…

  • 3e8 Photoshop2Info β€” [obsolete] (PS.2.0) General information
  • 3e9 MacintoshPrintInfo β€” [optional] Macintosh print manager info
  • 3eb Photoshop2ColorTable β€” [obsolete] (PS.2.0) Indexed colour table
  • 3ed ResolutionInfo β€” see appendix A in Photoshop SDK
  • 3ee AlphaChannelsNames β€” as a series of Pstrings
  • 3ef DisplayInfo β€” see appendix A in Photoshop SDK
  • 3f0 PStringCaption β€” [optional] the caption, as a Pstring
  • 3f1 BorderInformation β€” border width and units
  • 3f2 BackgroundColor β€” see additional Adobe information
  • 3f3 PrintFlags β€” labels, crop marks, colour bars, ecc...
  • 3f4 BWHalftoningInfo β€” Gray-scale and multich. half-toning info
  • 3f5 ColorHalftoningInfo β€” Colour half-toning information
  • 3f6 DuotoneHalftoningInfo β€” Duo-tone half-toning information
  • 3f7 BWTransferFunc β€” Gray-scale and multich. transfer function
  • 3f8 ColorTransferFuncs β€” Colour transfer function
  • 3f9 DuotoneTransferFuncs β€” Duo-tone transfer function
  • 3fa DuotoneImageInfo β€” Duo-tone image information
  • 3fb EffectiveBW β€” effective black and white values
  • 3fc ObsoletePhotoshopTag1 β€” [obsolete] ??
  • 3fd EPSOptions β€” Encapsulated Postscript options
  • 3fe QuickMaskInfo β€” channel ID plus initial state flag
  • 3ff ObsoletePhotoshopTag2 β€” [obsolete] ??
  • 400 LayerStateInfo β€” index of target layer (0 means bottom)
  • 401 WorkingPathInfo β€” should not be saved to the file
  • 402 LayersGroupInfo β€” for grouping layers together
  • 403 ObsoletePhotoshopTag3 β€” [obsolete] ??
  • 404 IPTC/NAA β€” see L</Valid tags for IPTC data>
  • 405 RawImageMode β€” image mode for raw format files
  • 406 JPEGQuality β€” [private]
  • 408 GridGuidesInfo β€” see additional Adobe information
  • 409 ThumbnailResource β€” see additional Adobe information
  • 40a CopyrightFlag β€” true if image is copyrighted
  • 40b URL β€” text string with a resource locator
  • 40c ThumbnailResource2 β€” see additional Adobe information
  • 40d GlobalAngle β€” global lighting angle for effects layer
  • 40e ColorSamplersResource β€” see additional Adobe information
  • 40f ICCProfile β€” see notes from Internat. Color Consortium
  • 410 Watermark β€” one byte
  • 411 ICCUntagged β€” 1 means intentionally untagged
  • 412 EffectsVisible β€” 1 byte to show/hide all effects layers
  • 413 SpotHalftone β€” version, length and data
  • 414 IDsBaseValue β€” base value for new layers ID's
  • 415 UnicodeAlphaNames β€” length plus Unicode string
  • 416 IndexedColourTableCount β€” (PS.6.0) 2 bytes
  • 417 TransparentIndex β€” (PS.6.0) 2 bytes
  • 419 GlobalAltitude β€” (PS.6.0) 4 bytes
  • 41a Slices β€” (PS.6.0) see additional Adobe info
  • 41b WorkflowURL β€” (PS.6.0) 4 bytes length + Unicode string
  • 41c JumpToXPEP β€” (PS.6.0) see additional Adobe info
  • 41d AlphaIdentifiers β€” (PS.6.0) 4*(n+1) bytes
  • 41e URLList β€” (PS.6.0) structured Unicode URL's
  • 421 VersionInfo β€” (PS.6.0) see additional Adobe info
  • 7d0-bb6 PathInfo_%3x β€” see additional Adobe info (saved path)
  • bb7 ClippingPathName β€” see additional Adobe info
  • 2710 PrintFlagsInfo β€” see additional Adobe info

πŸ’– IPTC data (Editorial information and envelope record) πŸ’–

Okay so this next bit is a whole vibe of its own. The structure of an IPTC stream is introduced in section "Structure of an IPTC data block" in Image::MetaData::JPEG::Structures. This section contains only the list of valid IPTC tags.

Since the use of APP13 for IPTC information in a JPEG picture is not a real standard, it is not clear which subset of IPTC should be considered valid 😭 my current guess is that only editorial IPTC datasets (2:xx) and, more rarely, some envelope datasets (1:xx, which are however needed for non ASCII character sets) are found.

Numeric tag values (record keys), in the first column, are in decimal notation, and they are followed by tag names in the second column. The presence of N in the third column means that the record is non-repeatable (i.e., there should not be two such records in the file). The following number or range in square brackets indicates valid lengths for the record data field. The final comment specifies additional format constraints, sometimes in natural language:

  • /regex/ means that the string must match the regular expression regex ✨
  • invalid means that this valid IPTC tag is not used in JPEG pictures πŸ™ˆ
  • other formats are specified in the notes
πŸ“Œ Note that IPTC strings are stored in records with an explicit length, so they do not need the final null character (they are not C-strings). Periodt.

1:xx datasets from the envelope record (seldom used)

  • 0 ModelVersion β€” N, [2,], binary, always 4 in JPEGs?
  • 5 Destination β€” [1-1024], word (see note 1)
  • 20 FileFormat β€” N, [2], invalid, binary
  • 22 FileFormatVersion β€” N, [2], invalid, binary (see 1:20)
  • 30 ServiceIdentifier β€” N, [<=10], word (see note 1)
  • 40 EnvelopeNumber β€” N, [8], invalid, /\d{8}/
  • 50 ProductID β€” [<=32], word (see note 1)
  • 60 EnvelopePriority β€” N, [1], invalid, /[1-9]/
  • 70 DataSent β€” N, [8], invalid, date (see note 2)
  • 80 TimeSent β€” N, [11], invalid, time (see note 3)
  • 90 CodedCharacterSet β€” N, [<=32], character set (see note 4)
  • 100 UNO β€” N, [14-80], invalid (eternal identifier)
  • 120 ARMIdentifier β€” N, [2], invalid, binary
  • 122 ARMVersion β€” N, [2], invalid, binary

2:xx datasets from the application record (editorial tags)

  • 0 RecordVersion β€” N, [2], binary, always 2 in JPEGs ?
  • 3 ObjectTypeReference β€” N, [3-67], /\d{2}:[\w\s]{0,64}?/
  • 4 ObjectAttributeReference β€” [4-68], /\d{3}:[\w\s]{0,64}?/
  • 5 ObjectName β€” N, [<=64], line (see note 5)
  • 7 EditStatus β€” N, [<=64], line (see note 5)
  • 8 EditorialUpdate β€” N, [2], /01/
  • 10 Urgency β€” N, [1], /[1-8]/
  • 12 SubjectReference β€” [13-236], complicated, see note 7
  • 15 Category β€” N, [<=3], /[a-zA-Z]{1,3}?/
  • 20 SupplementalCategory β€” [<=32], line (see note 5)
  • 22 FixtureIdentifier β€” N, [<=32], word (see note 1)
  • 25 Keywords β€” [<=64], line (see note 5)
  • 26 ContentLocationCode β€” [3], /[A-Z]{3}/
  • 27 ContentLocationName β€” [<=64], line (see note 5)
  • 30 ReleaseDate β€” N, [8], date (see note 2)
  • 35 ReleaseTime β€” N, [11], time (see note 3)
  • 37 ExpirationDate β€” N, [8], date (see note 2)
  • 38 ExpirationTime β€” N, [11], time (see note 3)
  • 40 SpecialInstructions β€” N, [<=256], line (see note 5)
  • 42 ActionAdvised β€” N, [2], /0[1-4]/
  • 45 ReferenceService β€” [10], invalid (see 1:30)
  • 47 ReferenceDate β€” [8], invalid (see 1:70)
  • 50 ReferenceNumber β€” [8], invalid (see 1:40)
  • 55 DateCreated β€” N, [8], date (see note 2)
  • 60 TimeCreated β€” N, [11], time (see note 3)
  • 62 DigitalCreationDate β€” N, [8], date (see note 2)
  • 63 DigitalCreationTime β€” N, [11], time (see note 3)
  • 65 OriginatingProgram β€” N, [32], line (see note 5)
  • 70 ProgramVersion β€” N, [<=10], line (see note 5)
  • 75 ObjectCycle β€” N, [1], /a|p|b/
  • 80 ByLine β€” [<=32], line (see note 5)
  • 85 ByLineTitle β€” [<=32], line (see note 5)
  • 90 City β€” N, [<=32], line (see note 5)
  • 92 SubLocation β€” N, [<=32], line (see note 5)
  • 95 Province/State β€” N, [<=32], line (see note 5)
  • 100 Country/PrimaryLocationCode β€” N, [3], /[A-Z]{3}/
  • 101 Country/PrimaryLocationName β€” N, [<=64], line (see note 5)
  • 103 OriginalTransmissionReference β€” N, [<=32], line (see note 5)
  • 105 Headline β€” N, [<=256], line (see note 5)
  • 110 Credit β€” N, [<=32], line (see note 5)
  • 115 Source β€” N, [<=32], line (see note 5)
  • 116 CopyrightNotice β€” N, [<=128], line (see note 5)
  • 118 Contact β€” [<=128], line (see note 5)
  • 120 Caption/Abstract β€” N, [<=2000], line with CR and LF
  • 122 Writer/Editor β€” [<=32], line (see note 5)
  • 125 RasterizedCaption β€” N, [7360], binary data (460x128 PBM)
  • 130 ImageType β€” N, [2], /[0-49][WYMCKRGBTFLPS]/
  • 131 ImageOrientation β€” N, [1], /P|L|S/
  • 135 LanguageIdentifier β€” N, [2-3], /[a-zA-Z]{2,3}?/
  • 150 AudioType β€” N, [2], /[012][ACMQRSTVW]/
  • 151 AudioSamplingRate β€” N, [6], /\d{6}/
  • 152 AudioSamplingResolution β€” N, [2], /\d{2}/
  • 153 AudioDuration β€” N, [6], duration (see note 6)
  • 154 AudioOutcue β€” N, [<=64], line (see note 5)
  • 200 ObjDataPreviewFileFormat β€” N, [2], invalid, binary (see 1:20)
  • 201 ObjDataPreviewFileFormatVer β€” N, [2], invalid, binary (see 1:22)
  • 202 ObjDataPreviewData β€” N, [<=256000], invalid, binary

Notes πŸ“

  1. A "word" is made of elements of what the IPTC standard calls the "graphic characters" set β€” aka literally every character that has a visual representation. Control codes, the space character and the DEL character are NOT graphic characters. And bestie, note that the visual representation of a graphic character depends upon the character set invoked at the time of evaluation. A "word" is matched by the following regular expression: /^[^\000-\040\177]*$/.
  2. A date is stored, in conformity to the ISO 8601 standard, as the eight character string 'CCYYMMDD' β€” so '19890317' means March 17th 1989, periodt. A date string is matched by the following regular expression: /\d{4}(0\d|1[0-2])([0-2]\d|3[01])/. Currently, I allow only years after 1800; but 'DateCreated' has no limitation, since it refers to the creation date of the photographed object, not to the creation of the photo itself. πŸ’…
  3. A time is stored, in conformity to the ISO 8601 standard, as the eleven character string 'HHMMSS+/-HHMM' β€” like '090000-0500' means 9AM, 5 hours behind the coordinated universal time. A time string is matched by the following regular expression: /([01]\d|2[0-3])[0-5]\d[0-5]\d[\+-]([01]\d|2[0-3])[0-5]\d/. πŸ•˜
  4. This dataset selects a character set, for use in character oriented datasets in records 2-6, according to the "International Register of Coded Character Sets" (ISO/IEC 2022 and ISO/IEC 2375, see for instance http://www.itscj.ipsj.or.jp/ISO-IR/), and typically consist of the escape control character followed by one or more graphic characters. For instance, "\033/A" refers to ISO-8859-1 (latin-1) and "\033%G" refers to UTF-8 (a Unicode encoding). ✨
  5. A "line" is made of graphic characters (see note 1) and space. This is matched by the following regular expression: /^[^\000-\037\177]*$/.
  6. A "duration" is stored like a "time", but there is no time zone spec β€” which means the string is only six characters wide (see also note 3). ⏳
  7. The complicated regular expression for the SubjectReference is the following: /[$validchar]{1,32}?:[01]\d{7}(:[$validchar\s]{0,64}?){3}/, where $validchar is '\040-\051\053-\071\073-\076\100-\176'. Yeah, it's giving unhinged regex, but we love her. 😭

πŸ‘‘ AUTHOR

Stefano Bettelli, bettelli@cpan.org

Copyright (C) 2004,2005,2006 by Stefano Bettelli

This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License. See the COPYING and LICENSE file for the license terms.

🌈 SEE ALSO

The main documentation page for the Image::MetaData::JPEG module.


and that's a wrap bestie!! πŸŽ€ this whole thing ships as part of perl v5.34.0, dated 2022-03-07 β€” go forth and read your tags, you absolute icon πŸ¦‹πŸ’œ