###########################################################
# A Perl package for showing/modifying JPEG (meta)data.   #
# Copyright (C) 2004,2005,2006 Stefano Bettelli           #
# See the COPYING and LICENSE files for license terms.    #
###########################################################

###########################################################
# This file contains only the package man-page in perldoc #
# format. In order to visualise it, it is sufficient to   #
# type "perldoc <name_of_this_file>".                     #
###########################################################

=head1 NAME

Image::MetaData::JPEG::TagLists - This document contains a collection of
tag tables for JPEG segments; it is an appendix to the main manual page of
the L<Image::MetaData::JPEG> module, which the reader should refer to for
further details and the general scope.

=head1 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 L<Structure|Image::MetaData::JPEG::Structures/Structure
of an Exif APP1 segment> appendix; this section and its subsections list
the valid interoperability record tags as well as their format.

=head2 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.

     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).

=head2 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).

     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]

=head2 Exif tags assigned to companies for IFD0 and IFD1

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 TIFF 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 "rumours". This list also includes some TIFF/IT
tags from ISO 12639 and some TIFF/EP tags from ISO 12234 (private Exif tags
in JPEG APP1 originated from TIFF/EP, so there is a large intersection:
TIFF/EP 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                       ]

=head2 Exif tags for the 0th IFD 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 IFD SubIFD; they are described at length
in the Exif L<standard document|Image::MetaData::JPEG::Structures/Structure
of an Exif APP1 segment> (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), 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).

     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
ASCII 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: " 

=head2 Exif tags for the 0th IFD Interoperability subdirectory

If the main image is compressed (which is always the case for a JPEG
picture), the "Design rule for Camera File system"
L<recommendations|Image::MetaData::JPEG::Structures/Structure of an Exif
APP1 segment> suggest to add another IFD below SubIFD, the Interoperability
IFD, 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 (ASCII, always null terminated). The 'count' column
obviously specifies the value count ('-' means that it is variable). The
"Index" and "Version" 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

=head2 Exif tags for the 0th IFD GPS subdirectory

The following tags are used for GPS attributes in the GPS IFD, pointed to
(if present) by the GPSInfo tag in IFD0 or IFD1. This standard was already
used in TIFF/EP, and is now part of L<Exif
2.2|Image::MetaData::JPEG::Structures/Structure of an Exif APP1
segment>. 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 (ASCII, always null terminated). The 'count' column
obviously specifies the value count ('-' means that it is variable). All
GPS tags are optional in a JPEG or TIFF file, but the 'VersionID' tag must
be present, if the GPS IFD 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].

YYYY:MM:DD
=head1 Valid tags for Photoshop-style APP13 data

The structure of a Photoshop-style APP13 segment is introduced in section
L<Image::MetaData::JPEG::Structures/Structure of a Photoshop-style APP13
segment>. 

=head2 Non-IPTC data (visual rendering - Photoshop variables)

This section contains only the list of valid Image Resource ID's; note that
not all file formats use all ID's, and some information may be stored
somewhere else in the file. In the following list 'PS' 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

=head2 IPTC data (Editorial information and envelope record)

The structure of an IPTC stream is introduced in section
L<Image::MetaData::JPEG::Structures/Structure of an IPTC data block>. 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).

 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'.

=head1 AUTHOR

Stefano Bettelli, B<bettelli@cpan.org>

=head1 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 GNU L<General Public License|perlgpl>. See the
COPYING and LICENSE file for the license terms.

=head1 SEE ALSO

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

=cut

### Local Variables: ***
### mode:perl ***
### fill-column:75 ***
### ispell-dictionary: "british" ***
### End: ***
