Valid tags for Exif APP1 data

The Japan Electronics and Information Technology Industries Association (\s-1JEITA\s0) 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 \s-1JPEG\s0 picture, to be written in the \s-1APP1\s0 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 \s-1TIFF\s0 6.0 tags for \s-1IFD0\s0 and \s-1IFD1\s0

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

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

  Notes:

  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.
          ------------------------       ------------------------
          val. 0th row  0th column       val. 0th row  0th column
          ----|--------|----------       ----|--------|----------
           1    top      left             5    left     top
           2    top      right            6    right    top
           3    bottom   right            7    right    bottom
           4    bottom   left             8    left     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 \s-1TIFF\s0 6.0 tags not in Exif 2.2 for \s-1IFD0\s0

The tags listed in the following table are present in the \s-1TIFF\s0 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 \s-1IFD0\s0 (they are not present in \s-1IFD1\s0, I assume). The 'class' column carries the tag class; possible values are: a (\s-1TIFF\s0 6.0 tags for baseline TIFFs not in Exif 2.2), b (extensions to \s-1TIFF\s0 6.0 specs not in Exif 2.2) and '-' (updates and corrections to \s-1TIFF\s0 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 (\s-1ASCII\s0, 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).

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

Exif tags assigned to companies for \s-1IFD0\s0 and \s-1IFD1\s0

The tags listed in the following table, all with a value larger than 0x8000, i.e. 32000, were requested by individual companies and assigned to them by the \s-1TIFF\s0 committee; well, at least I think, because it is very difficult to have an official list for these tags, so that they should be considered at the level of \*(L"rumours\*(R". This list also includes some \s-1TIFF/IT\s0 tags from \s-1ISO\s0 12639 and some \s-1TIFF/EP\s0 tags from \s-1ISO\s0 12234 (private Exif tags in \s-1JPEG\s0 \s-1APP1\s0 originated from \s-1TIFF/EP\s0, so there is a large intersection: \s-1TIFF/EP\s0 tags which are also Exif are not listed here).

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

Exif tags for the 0th \s-1IFD\s0 Exif private subdirectory

The tags listed in the following table are all the Exif 2.2 private tags, i.e., those which populate the 0th \s-1IFD\s0 SubIFD; they are described at length in the Exif standard document (but see also the non-standard Photoshop SubIFD tags at the end of this section). The 'class' column carries the tag class; 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), \s-1SR\s0 (signed rational), U (undefined) and A (\s-1ASCII\s0, 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 (\s-1IFD0\s0) can come in four varieties (uncompressed chunky, uncompressed planar, uncompressed \s-1YCC\s0 and \s-1JPEG\s0 compressed). This module currently focuses only on \s-1JPEG\s0 pictures (not \s-1TIFF\s0), 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).

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

Notes: 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 -------------------------------------------------------- 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. 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]. 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 combina- tions are '4560' (if RGB uncompressed) and '1230' (all other cases). 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. 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). 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. 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/. 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). 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/. 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). 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)*/.

The Adobe's Photoshop program, at least from version 7.0 on, 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 \s-1ASCII\s0 strings ($ASCII type), and contain the description of the tags themselves. The following might be an incomplete list:

Hexadecimal code count value begins with (a null terminated | Tag name type | string is to be added at the end): | | | | | fde8 _OwnerName A - "Owner's Name: " fde9 _SerialNumber A - "Serial Number: " fdea _Lens A - "Lens: " fe4c _RawFile A - "Raw File: " fe4d _Converter A - "Converter: " fe4e _WhiteBalance A - "White Balance: " fe51 _Exposure A - "Exposure: " fe52 _Shadows A - "Shadows: " fe53 _Brightness A - "Brightness: " fe54 _Contrast A - "Contrast: " fe55 _Saturation A - "Saturation: " fe56 _Sharpness A - "Sharpness: " fe57 _Smoothness A - "Smoothness: " fe58 _MoireFilter A - "Moire Filter: "

Exif tags for the 0th \s-1IFD\s0 Interoperability subdirectory

If the main image is compressed (which is always the case for a \s-1JPEG\s0 picture), the \*(L"Design rule for Camera File system\*(R" recommendations suggest to add another \s-1IFD\s0 below SubIFD, the Interoperability \s-1IFD\s0, pointed to by the InteroperabilityOffset tag; legal tags are listed in the following table. The first two columns show tag hexadecimal codes and names. The 'type' column specifies the tag type: I (short or long), U (undefined) and A (\s-1ASCII\s0, always null terminated). The 'count' column obviously specifies the value count ('-' means that it is variable). The \*(L"Index\*(R" and \*(L"Version\*(R" tags are mandatory if the subIFD is present, and they are automatically added by this module if necessary.

Hexadecimal code count SubIFD notes | Tag name type | suppt. | | | | | | | 0001 InteroperabilityIndex A 4 NNNM R98 (THM would work for IFD1) 0002 InteroperabilityVersion U 4 NNNM e.g. '0100' means 1.00 1000 RelatedImageFileFormat A - NNNO e.g. 'Exif JPEG Ver. 2.1' 1001 RelatedImageWidth I 1 NNNO image X dimension 1002 RelatedImageLength I 1 NNNO image Y dimension

Exif tags for the 0th \s-1IFD\s0 \s-1GPS\s0 subdirectory

The following tags are used for \s-1GPS\s0 attributes in the \s-1GPS\s0 \s-1IFD\s0, pointed to (if present) by the GPSInfo tag in \s-1IFD0\s0 or \s-1IFD1\s0. This standard was already used in \s-1TIFF/EP\s0, and is now part of Exif 2.2. The first two columns show tag hexadecimal codes and names. The 'type' column specifies the tag type: B (byte), S (short), R (rational), U (undefined) and A (\s-1ASCII\s0, always null terminated). The 'count' column obviously specifies the value count ('-' means that it is variable). All \s-1GPS\s0 tags are optional in a \s-1JPEG\s0 or \s-1TIFF\s0 file, but the 'VersionID' tag must be present, if the \s-1GPS\s0 \s-1IFD\s0 is present (a default 'VersionID' = (2,2,0,0), i.e. v.2.2, is automatically added by this module if necessary).

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

Notes: 1) A latitude or longitude reference specifies a sign for another (related) latitude or longitude value tag. A latitude reference can be only 'N' (for North) or 'S' (for South); a longitude reference can be only 'E' (for East) or 'W' (for West). 2) A latitude or a longitude is stored as a sequence of three rational numbers (each rational number is the ratio of two unsigned long integers), representing degrees, minutes and seconds. A typical format is (dd/1, mm/1, ss/1). Sometimes, seconds are dropped in favour of fractions of minutes (usually with two decimal places); in this case the format is (dd/1, mmmm/100, 0/1). Latitudes are limited to the interval [0,90], while longitudes 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). Let us appreciate the fact that knot in English is both a unit of speed (one nautical mile per hour) and of distance (one nautical mile). 4) A direction reference specifies how to 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, whose first character specifies the character code used: this is 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. Since the type is not ASCII, null termination is not required. 7) A date tag value is a null terminated string of the form "YYYY:MM:DD" (note the colon signs). [I currently allow only years after 1800].

Valid tags for Photoshop-style APP13 data

The structure of a Photoshop-style \s-1APP13\s0 segment is introduced in section \*(L"Structure of a Photoshop-style \s-1APP13\s0 segment\*(R" in Image::MetaData::JPEG::Structures.

Non-IPTC data (visual rendering - Photoshop variables)

This section contains only the list of valid Image Resource \s-1ID\s0's; note that not all file formats use all \s-1ID\s0's, and some information may be stored somewhere else in the file. In the following list '\s-1PS\s0' stands for Photoshop, and 'Pstring' for Pascal string:

Hexadecimal code notes | Tag name | | | | 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

\s-1IPTC\s0 data (Editorial information and envelope record)

The structure of an \s-1IPTC\s0 stream is introduced in section \*(L"Structure of an \s-1IPTC\s0 data block\*(R" in Image::MetaData::JPEG::Structures. This section contains only the list of valid \s-1IPTC\s0 tags. Since the use of \s-1APP13\s0 for \s-1IPTC\s0 information in a \s-1JPEG\s0 picture is not a real standard, it is not clear which subset of \s-1IPTC\s0 should be considered valid; my current guess is that only editorial \s-1IPTC\s0 datasets (2:xx) and, more rarely, some envelope datasets (1:xx, which are however needed for non \s-1ASCII\s0 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: \*(L"/regex/\*(R" means that the string must match the regular expression regex; \*(L"invalid\*(R" means that this valid \s-1IPTC\s0 tag is not used in \s-1JPEG\s0 pictures; other formats are specified in the notes. Note that \s-1IPTC\s0 strings are stored in records with an explicit length, so they do not need the final null character (they are not C-strings).

Decimal code size notes | Tag name repeatable | | | | | | | ------------------------------------------------------------------------- 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 "graphic characters" set, i.e. all characters that have visual representation. Control codes, the space character and the DEL character are NOT graphic characters. 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', e.g., '19890317' indicates March 17th 1989. 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', e.g., '090000-0500' indicates 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 L<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; this means that 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'.

AUTHOR

Stefano Bettelli, [email protected]

COPYRIGHT AND LICENSE

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 \s-1GNU\s0 General Public License. See the \s-1COPYING\s0 and \s-1LICENSE\s0 file for the license terms.

RELATED TO Image::MetaData::JPEG::TagLists…

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