Image:...agLists(3pm)
β¨ NAME β¨
Image::MetaData::JPEG::TagLists(3pm) β a whole collection of tag tables for JPEG segments, bestie. That's the vibe. π
πΈ OVERVIEW πΈ
This doc is literally a collection of tag tables for JPEG segments. It's an appendix to the main manual page of the Image::MetaData::JPEG module, so if you need further details and the general scope, go read that one first, okay? β¨
π Valid tags for Exif APP1 data π
The Japan Electronics and Information Technology Industries Association (JEITA) set up a standard for an exchange format for digital still cameras pictures, known as Exif. This standard defines a structure for embedding meta-data in a JPEG picture, to be written in the APP1 segment. The generalities and the reference documents about this structure are introduced in the Structure appendix; this section and its subsections list the valid interoperability record tags as well as their format. π
π¦ Canonical Exif 2.2 and TIFF 6.0 tags for IFD0 and IFD1 π¦
In general, IFD0 and IFD1 can host tags from the same set. These tags are divided in three categories: canonical, additional and registered to companies. The tags listed in the following table are to be considered canonical; they are described at length in the Exif standard document, and can be found both in the IFD0 and in the IFD1 (some of them, in fact, must be present in both directories). The 'class' column carries the tag class; possible values are: A (image data structure), B (offsets), C (image data characteristics), D (other tags) and P (pointers to other IFDs). The two following columns show tag hexadecimal codes and names. The 'type' column specifies the (always unsigned) tag type: I (short or long), S (short), L (long), R (rational) and A (ASCII, always null terminated). The 'count' column obviously carries the tag count (- for a variable count, either because it is a variable length string or because it depends on other tags).
The 'IFD0' and 'IFD1' columns specify the support level in the respective directory; each column comprises four letters, because both the primary image (IFD0) and the thumbnail (IFD1) can come in four varieties (uncompressed chunky, uncompressed planar, uncompressed YCC and JPEG compressed). This module currently focuses only on JPEG pictures (not TIFF), so only the fourth letter of the 'IFD0' column is interesting, but note that the thumbnail of a JPEG image can be uncompressed. The support level codes stand for: M (mandatory), R (recommended), O (optional), N (not_recorded) and J (included in JPEG marker and so not recorded).
The 'thumbnail-only' column shows a T for those records which cannot be set/changed by the user exception made during a thumbnail update action (and some of them are calculated automatically anyway). Note that, in some cases, it is possible to set a tag when its support level is 'N' (e.g., the YCbCr stuff in IFD1): picture displaying programs should however simply ignore it. Some other tags, concerning offsets or thumbnail specific information, cannot be set by the module user (they are calculated automatically, more reliably): these are marked by calculated in the notes, or by a T in the thumbnail-only column.
Okay, tag table time, bestie. One bullet per tag, all the deets:
A100ImageWidthβ typeI, count1, IFD0MMMJ, IFD1MMMJ, thumbnail-onlyT (not JPEG), notes: pixels/row.A101ImageLengthβ typeI, count1, IFD0MMMJ, IFD1MMMJ, thumbnail-onlyT (not JPEG), notes: num. rows.A102BitsPerSampleβ typeS, count3, IFD0MMMJ, IFD1MMMJ, thumbnail-onlyT (not JPEG), notes:8,8,8.A103Compressionβ typeS, count1, IFD0MMMJ, IFD1MMMM, thumbnail-onlyT, notes:1(uncompr.) or 6(JPEG).A106PhotometricInterpretationβ typeS, count1, IFD0MMMN, IFD1MMMJ, notes:2(RGB) or 6(YCbCr).D10eImageDescriptionβ typeA, count-, IFD0RRRR, IFD1OOOO, notes: (see note 1).D10fMakeβ typeA, count-, IFD0RRRR, IFD1OOOO, notes: camera manufacturer.D110Modelβ typeA, count-, IFD0RRRR, IFD1OOOO, notes: camera model.B111StripOffsetsβ typeI, count-, IFD0MMMN, IFD1MMMN, notes:calculated.A112Orientationβ typeS, count1, IFD0RRRR, IFD1OOOO, notes: (see note 2).A115SamplesPerPixelβ typeS, count1, IFD0MMMJ, IFD1MMMJ, thumbnail-onlyT (not JPEG), notes:3 compon..B116RowsPerStripβ typeI, count1, IFD0MMMN, IFD1MMMN, thumbnail-onlyT (not JPEG).B117StripByteCountsβ typeI, count-, IFD0MMMN, IFD1MMMN, thumbnail-onlyT (not JPEG).A11aXResolutionβ typeR, count1, IFD0MMMM, IFD1MMMM, notes: (see note 3).A11bYResolutionβ typeR, count1, IFD0MMMM, IFD1MMMM, notes: (see note 3).A11cPlanarConfigurationβ typeS, count1, IFD0OMOJ, IFD1OMOJ, notes: (see note 4).A128ResolutionUnitβ typeS, count1, IFD0MMMM, IFD1MMMM, notes: (see note 3).C12dTransferFunctionβ typeS, count768, IFD0RRRR, IFD1OOOO, notes: (see note 5).D131Softwareβ typeA, count-, IFD0OOOO, IFD1OOOO, notes: Exif software/firmware.D132DateTimeβ typeA, count20, IFD0RRRR, IFD1OOOO, notes: (see note 6).D13bArtistβ typeA, count-, IFD0OOOO, IFD1OOOO, notes: owner/photogr./creator.C13eWhitePointβ typeR, count2, IFD0OOOO, IFD1OOOO, notes: (see note 5).C13fPrimaryChromaticitiesβ typeR, count6, IFD0OOOO, IFD1OOOO, notes: (see note 5).B201JPEGInterchangeFormatβ typeL, count1, IFD0NNNN, IFD1NNNM, notes:calculated.B202JPEGInterchangeFormatLengthβ typeL, count1, IFD0NNNN, IFD1NNNM, thumbnail-onlyT (only JPEG).C211YCbCrCoefficientsβ typeR, count3, IFD0NNOO, IFD1NNOO, notes: (see note 7).A212YCbCrSubSamplingβ typeS, count2, IFD0NNMJ, IFD1NNMJ, notes: (see note 7).A213YCbCrPositioningβ typeS, count1, IFD0NNMM, IFD1NNOO, notes: (see note 7).C214ReferenceBlackWhiteβ typeR, count6, IFD0OOOO, IFD1OOOO, notes: (see note 8).D8298Copyrightβ typeA, count-, IFD0OOOO, IFD1OOOO, notes: of photogr./editor.P8769ExifOffsetβ typeL, count1, IFD0MMMM, IFD1OOOO, notes:calculated.P8825GPSInfoβ typeL, count1, IFD0OOOO, IFD1OOOO, notes:calculated.
π Notes, bestie π
- 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
UserCommentis to be used (seeL</Exif tags for the 0th IFD Exif private subdirectory>). - The image orientation is defined with respect to first row and the first column, according to the following table (values not listed here are reserved and should not be used); the default value is
1.1β 0th rowtop, 0th columnleft2β 0th rowtop, 0th columnright3β 0th rowbottom, 0th columnright4β 0th rowbottom, 0th columnleft5β 0th rowleft, 0th columntop6β 0th rowright, 0th columntop7β 0th rowright, 0th columnbottom8β 0th rowleft, 0th columnbottom
- The
XResolutionandYResolutiontags indicate the number of pixels per resolution unit (given by theResolutionUnittag) along the image width or height respectively. The resolution unit can be only2(inches) or3(centimetres), all other values being reserved. When the resolution is not set, a value of72dots/inch is assumed. - 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. TransferFunction,WhitePointandPrimaryChromaticitiesspecify, respectively, a transfer function for the image in tabular style (3*256short 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 theColorSpaceL<private Exif tag|/Exif tags for the 0th IFD Exif private subdirectory>.- 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 alsoDateTimeOriginalandDateTimeDigitizedin the SubIFDL<section|/Exif tags for the 0th IFD Exif private subdirectory>. [Currently, only years after1800can be set with this Perl module]. - 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).
YCbCrSubSamplingis 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.YCbCrPositioningis 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 only1(centred, default) or2(co-sited).YCbCrCoefficientscontains the matrix coefficients for the transformation from RGB to YCbCr image data. - 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](whenPhotometricInterpretationis RGB) or[0, 255, 0, 128, 0, 128](whenPhotometricInterpretationis YCbCr).
π Additional TIFF 6.0 tags not in Exif 2.2 for IFD0 π
The tags listed in the following table are present in the TIFF 6.0 standard and not in the Exif 2.2 standard. They are presented here just for reference, since some digital cameras or programs still include them, incorrectly, in the IFD0 (they are not present in IFD1, I assume). The 'class' column carries the tag class; possible values are: a (TIFF 6.0 tags for baseline TIFFs not in Exif 2.2), b (extensions to TIFF 6.0 specs not in Exif 2.2) and - (updates and corrections to TIFF 6.0). The two following columns show tag hexadecimal codes and names. The 'type' column specifies the tag type: i (byte or short), I (short or long), B (byte), S (short), L (long), R (rational), F (floating point numbers), D (double precision floating point numbers), - (unspecified, best fit) and A (ASCII, always null terminated). The 'count' column obviously carries the tag count (- that it is variable, either because it is a variable length string or because it depends on other tags).
okay bestie we're BACK and we are picking up mid-table like it's nothing π€ no re-intro, no warm-up, just straight into the hex. class column first, then the tag, then type + count + why anybody cares. locked in π
- class
aΒ·feNewSubfileType β typeL, count1Β· TIFFs can hold multiple images - class
aΒ·ffSubFileType β typeS, count1Β· TIFFs can hold multiple images - class
aΒ·107Thresholding β typeS, count1Β· for Graylevel to Black&White - class
aΒ·108CellWidth β typeS, count1Β· halftoning matrix support - class
aΒ·109CellLength β typeS, count1Β· halftoning matrix support - class
aΒ·10aFillOrder β typeS, count1Β· bits' logical order in a byte - class
bΒ·10dDocumentName β typeA, count-Β· document storage and retrieval - class
aΒ·118MinSampleValue β typeS, count-Β· only for statistical purposes - class
aΒ·119MaxSampleValue β typeS, count-Β· only for statistical purposes - class
bΒ·11dPageName β typeA, count-Β· document storage and retrieval - class
bΒ·11eXPosition β typeR, count1Β· document storage and retrieval - class
bΒ·11fYPosition β typeR, count1Β· document storage and retrieval - class
aΒ·120FreeOffsets β typeL, count-Β· not recommended for interchange - class
aΒ·121FreeByteCounts β typeL, count-Β· not recommended for interchange - class
aΒ·122GrayResponseUnit β typeS, count1Β· for gray-scale images - class
aΒ·123GrayResponseCurve β typeS, count-Β· for gray-scale images - class
bΒ·124T4Options β typeL, count1Β· (group 3 options) - class
bΒ·125T6Options β typeL, count1Β· (group 4 options) - class
bΒ·129PageNumber β typeS, count2Β· document storage and retrieval - class
-Β·12cColorResponseUnit β typeS, count1Β· [obsoleted in TIFF 6.0] - class
aΒ·13cHostComputer β typeA, count-Β· computer/OS used for creation - class
bΒ·13dPredictor β typeS, count1Β· differencing predictor - class
aΒ·140Colormap β typeS, count-Β· RGB colour map - class
bΒ·141HalftoneHints β typeS, count2Β· half tone hints - class
bΒ·142TileWidth β typeI, count1Β· tiled images - class
bΒ·143TileLength β typeI, count1Β· tiled images - class
bΒ·144TileOffsets β typeL, count-Β· tiled images - class
bΒ·145TileByteCounts β typeI, count-Β· tiled images - class
-Β·146BadFaxLines β typeI, count1Β· [TIFF class F draft] - class
-Β·147CleanFaxData β typeS, count1Β· [TIFF class F draft] - class
-Β·148ConsecutiveBadFaxLines β typeI, count1Β· [TIFF class F draft] - class
-Β·14aSubIFDs β typeL, count-Β· [Adobe TIFF technote 1] - class
bΒ·14cInkSet β typeS, count1Β· CMYK images - class
bΒ·14dInkNames β typeA, count-Β· CMYK images - class
bΒ·14eNumberOfInks β typeS, count1Β· CMYK images - class
bΒ·150DotRange β typei, count-Β· CMYK images - class
bΒ·151TargetPrinter β typeA, count-Β· CMYK images - class
aΒ·152ExtraSamples β typeS, count-Β· pixel extra components - class
bΒ·153SampleFormats β typeS, count-Β· data sample format - class
bΒ·154SMinSampleValue β type-, count-Β· data sample format - class
bΒ·155SMaxSampleValue β type-, count-Β· data sample format - class
bΒ·156TransferRange β typeS, count6Β· image colourimetry - class
-Β·157ClipPath β typeB, count-Β· [Adobe TIFF technote 2] - class
-Β·158XClipPathUnits β typeD, count1Β· [Adobe TIFF technote 2] - class
-Β·159YClipPathUnits β typeD, count1Β· [Adobe TIFF technote 2] - class
-Β·15aIndexed β typeS, count1Β· [Adobe TIFF technote 3] - class
-Β·15bJPEGTables β type-, count-Β· [update (1995) for JPEG-in-TIFF] - class
-Β·15fOPIProxy β typeS, count1Β· [Adobe TIFF technote (OPI)] - class
bΒ·200JPEGProc β typeS, count1Β· JPEG support - class
bΒ·203JPEGRestartInterval β typeS, count1Β· JPEG support - class
bΒ·205JPEGLosslessPredictors β typeS, count-Β· JPEG support - class
bΒ·206JPEGPointTransforms β typeS, count-Β· JPEG support - class
bΒ·207JPEGQTables β typeL, count-Β· JPEG support - class
bΒ·208JPEGDCTables β typeL, count-Β· JPEG support - class
bΒ·209JPEGACTables β typeL, count-Β· JPEG support - class
-Β·2bcXML_Packet β typeB, count-Β· [Adobe XMP technote 9-14-02]
and that's the WHOLE table, we ate, zero crumbs left π
β¨ Exif tags assigned to companies for IFD0 and IFD1 β¨
okay so this next batch is giving β¨corporateβ¨ energy, because every single tag in the table below has a value bigger than 0x8000, like, 32000 and up. These were requested by individual companies and handed out to them by the TIFF committee. wellβ¦ at least that's what I think, because getting an official list for these tags is genuinely so hard π so pls treat them as being at the level of "rumours". This list also has some TIFF/IT tags from ISO 12639 and some TIFF/EP tags from ISO 12234 in it (the private Exif tags in JPEG APP1 originally came from TIFF/EP, so the two overlap a LOT β and any TIFF/EP tags that are also Exif tags are simply not listed here). no cap. π«Ά
800dImageID β typeA, count-Β· [Adobe TIFF technote (OPI)]80b9RefPts β type?, count?Β· [Island Graphics]80baRegionTackPoint β type?, count?Β· [Island Graphics]80bbRegionWarpCorners β type?, count?Β· [Island Graphics]80bcRegionAffine β type?, count?Β· [Island Graphics]80e3Matteing β typeS, count1Β· [SGI (obsoleted by ExtraSamples)]80e4DataType β typeS, count-Β· [SGI (obsoleted by SampleFormat)]80e5ImageDepth β typeI, count1Β· [SGI (z dimension)]80e6TileDepth β typeI, count1Β· [SGI (subvolume tiling)]8214ImageFullWidth β typeL, count1Β· [Pixar (cropped images)]8215ImageFullLength β typeL, count1Β· [Pixar (cropped images)]8216TextureFormat β typeA, count-Β· [Pixar (texture formats)]8217WrapModes β typeA, count-Β· [Pixar (texture formats)]8218FovCot β typeF, count1Β· [Pixar (texture formats)]8219MatrixWorldToScreen β typeF, count16Β· [Pixar (texture formats)]821aMatrixWorldToCamera β typeF, count16Β· [Pixar (texture formats)]827dWriterSerialNumber β type?, count?Β· [Eastman Kodak (device serial number)]828dCFARepeatPatternDim β typeS, count2Β· [ISO/DIS 12234-2 TIFF/EP]828eCFAPattern β typeB, count-Β· [ISO/DIS 12234-2 TIFF/EP]828fBatteryLevel β typeRA, count1-Β· [ISO/DIS 12234-2 TIFF/EP]830eModelPixelScaleTag β typeD, count3Β· [SoftDesk (GeoTIFF)]83bbIPTC/NAA β typeLA, count-Β· [ISO/DIS 12234-2 TIFF/EP]8480IntergraphMatrixTag β typeD, count16Β· [Intergraph, deprecated (GeoTIFF)]8482ModelTiepointTag β typeD, count-Β· [Intergraph, aka Georef.Tag (GeoTIFF)]84e0Site β typeA, count-Β· [ISO/DIS 12639 TIFF/IT]84e1ColorSequence β typeA, count-Β· [ISO/DIS 12639 TIFF/IT]84e2IT8Header β typeA, count-Β· [ISO/DIS 12639 TIFF/IT]84e3RasterPadding β typeS, count1Β· [ISO/DIS 12639 TIFF/IT]84e4BitsPerRunLength β typeS, count1Β· [ISO/DIS 12639 TIFF/IT]84e5BitsPerExtendedRunLength β typeS, count1Β· [ISO/DIS 12639 TIFF/IT]84e6ColorTable β typeB, count-Β· [ISO/DIS 12639 TIFF/IT]84e7ImageColorIndicator β typeB, count1Β· [ISO/DIS 12639 TIFF/IT]84e8BackgroundColorIndicator β typeB, count1Β· [ISO/DIS 12639 TIFF/IT]84e9ImageColorValue β typeB, count1Β· [ISO/DIS 12639 TIFF/IT]84eaBackgroundColorValue β typeB, count1Β· [ISO/DIS 12639 TIFF/IT]84ebPixelIntensityRange β typeB, count2Β· [ISO/DIS 12639 TIFF/IT]84ecTransparencyIndicator β typeB, count1Β· [ISO/DIS 12639 TIFF/IT]84edColorCharacterization β typeA, count-Β· [ISO/DIS 12639 TIFF/IT]84eeHCUsage β typeL, count1Β· [ISO/DIS 12639 TIFF/IT]84efTrapIndicator β typeB, count1Β· [ISO/DIS 12639 TIFF/IT]84f0CMYKEquivalent β typei, count-Β· [ISO/DIS 12639 TIFF/IT]84f1Reserved_TIFF_IT_1 β type-, count-Β· [ISO/DIS 12639 TIFF/IT]84f2Reserved_TIFF_IT_2 β type-, count-Β· [ISO/DIS 12639 TIFF/IT]84f3Reserved_TIFF_IT_3 β type-, count-Β· [ISO/DIS 12639 TIFF/IT]85b8FrameCount β typeL, count1Β· [Texas Instruments (Sequence Count)]85d8ModelTransformationTag β typeD, count16Β· [JPL Cartogr. App. Group (GeoTIFF)]8649PhotoshopImageResources β typeB, count?Β· [Adobe (Photoshop)]8773ICCProfile β type-, count-Β· [Inter Colour Consortium (TIFF/IT)]87afGeoKeyDirectoryTag β typeS, count-Β· [SPOT Image Inc. (GeoTIFF)]87b0GeoDoubleParamsTag β typeD, count-Β· [SPOT Image Inc. (GeoTIFF)]87b1GeoAsciiParamsTag β typeA, count-Β· [SPOT Image Inc. (GeoTIFF)]87beJBIGOptions β type?, count?Β· [Pixel Magic]8829Interlace β typeS, count1Β· [ISO/DIS 12234-2 TIFF/EP]882aTimeZoneOffset β typeSS, count-Β· [ISO/DIS 12234-2 TIFF/EP]882bSelfTimerMode β typeS, count1Β· [ISO/DIS 12234-2 TIFF/EP]885cFaxRecvParams β typeL, count1Β· [SGI (fax support)]885dFaxSubAddress β typeA, count-Β· [SGI (fax support)]885eFaxRecvTime β typeL, count1Β· [SGI (fax support)]8871FedExEDR β type?, count?Β· [FedEx]920bFlashEnergy β typeR, count-Β· [ISO/DIS 12234-2 TIFF/EP]920cSpatialFrequencyResponse β type-, count-Β· [ISO/DIS 12234-2 TIFF/EP]920dNoise β type-, count-Β· [ISO/DIS 12234-2 TIFF/EP]920eFocalPlaneXResolution β typeR, count1Β· [ISO/DIS 12234-2 TIFF/EP]920fFocalPlaneYResolution β typeR, count1Β· [ISO/DIS 12234-2 TIFF/EP]9210FocalPlaneResolutionUnit β typeS, count1Β· [ISO/DIS 12234-2 TIFF/EP]9211ImageNumber β typeL, count1Β· [ISO/DIS 12234-2 TIFF/EP]9212SecurityClassification β typeA, count-Β· [ISO/DIS 12234-2 TIFF/EP]9213ImageHistory β typeA, count-Β· [ISO/DIS 12234-2 TIFF/EP]9215ExposureIndex β typeR, count-Β· [ISO/DIS 12234-2 TIFF/EP]9216TIFF/EPStandardID β typeB, count4Β· [ISO/DIS 12234-2 TIFF/EP]9217SensingMethod β typeS, count1Β· [ISO/DIS 12234-2 TIFF/EP]923fStoNits β typeD, count1Β· [SGI (LogLuv Encoding)]935cImageSourceData β type-, count-Β· [Adobe Photoshop]c4a5PrintIM_Data β type?, count?Β· [Epson]c44fPhotoshopAnnotations β type?, count?Β· [Adobe Photoshop]ffffDCSHueShiftValues β type?, count?Β· [Eastman Kodak]
likeβ¦ look at all these little corporate fingerprints, iconic honestly π
and yes the ? types are literally ? in the source, that's not me being confused bestie, that's the actual data π
lowkey obsessed with ffff being Eastman Kodak's whole thing. main character hex code fr fr πΈ
and we are NOT done, there's more coming so don't you dare close the tab π¦
β¨ Exif tags for the 0th IFD Exif private subdirectory β¨
okay bestie, so these tags? They're literally all the Exif 2.2 private tags β the ones that populate the 0th IFD SubIFD. The Exif standard document describes them at length (but also peep the non-standard Photoshop SubIFD tags at the end of this section, iykyk). The 'class' column? It's giving tag class energy. Possible values are: a (tags relating to version), b (image data characteristics), c (image configuration), d (user information), e (related file information), f (date and time), g (picture taking conditions) and h (other Exif 2.2 tags). The two following columns show tag hexadecimal codes and names. The 'type' column specifies the tag type: I (short or long), S (short), L (long), R (rational), SR (signed rational), U (undefined) and A (ASCII, always null terminated). The 'count' column obviously carries the tag count (- means that it is variable).
The 'SubIFD' column specifies the support level; it comprises four letters, because the primary image (IFD0) can come in four varieties (uncompressed chunky, uncompressed planar, uncompressed YCC and JPEG compressed). This module currently focuses only on JPEG pictures (not TIFF), so only the fourth letter is interesting. The support level codes stand for: M (mandatory), R (recommended), O (optional), and N (not recorded). Tags marked as 'calculated' in the notes must not be set by the module user, since they concern offsets and data types (which are calculated automatically, more reliably).
Now, the full tag table, one by one, no skips π :
829aExposureTimeβ classg, typeR, count1, SubIFDRRRRβ in seconds829dFNumberβ classg, typeR, count1, SubIFDOOOOβ (see note 1)8822ExposureProgramβ classg, typeS, count1, SubIFDOOOOβ valid values are 0-88824SpectralSensitivityβ classg, typeA, count-, SubIFDOOOOβ see ASTM technical committee8827ISOSpeedRatingsβ classg, typeS, count-, SubIFDOOOOβ see ISO 122328828OECFβ classg, typeU, count-, SubIFDOOOOβ see ISO 145249000ExifVersionβ classa, typeU, count4, SubIFDMMMMβ (see note 2)9003DateTimeOriginalβ classf, typeA, count20, SubIFDOOOOβ (see note 3)9004DateTimeDigitizedβ classf, typeA, count20, SubIFDOOOOβ (see note 3)9101ComponentsConfigurationβ classc, typeU, count4, SubIFDNNNMβ (see note 4)9102CompressedBitsPerPixelβ classc, typeR, count1, SubIFDNNNOβ compression rate9201ShutterSpeedValueβ classg, typeSR, count1, SubIFDOOOOβ (see note 1)9202ApertureValueβ classg, typeR, count1, SubIFDOOOOβ (see note 1)9203BrightnessValueβ classg, typeSR, count1, SubIFDOOOOβ (see note 1)9204ExposureBiasValueβ classg, typeSR, count1, SubIFDOOOOβ (see note 1)9205MaxApertureValueβ classg, typeR, count1, SubIFDOOOOβ smallest ApertureValue9206SubjectDistanceβ classg, typeR, count1, SubIFDOOOOβ in meters9207MeteringModeβ classg, typeS, count1, SubIFDOOOOβ valid values are 0-6 and 2559208LightSourceβ classg, typeS, count1, SubIFDOOOOβ use 0-4,9-15,17-24 or 2559209Flashβ classg, typeS, count1, SubIFDRRRRβ (see note 5)920aFocalLengthβ classg, typeR, count1, SubIFDOOOOβ in millimetres9214SubjectAreaβ classg, typeS, count-, SubIFDOOOOβ (see note 6)927cMakerNoteβ classd, typeU, count-, SubIFDOOOOβ calculated9286UserCommentβ classd, typeU, count-, SubIFDOOOOβ (see note 7)9290SubSecTimeβ classf, typeA, count-, SubIFDOOOOβ (see note 8)9291SubSecTimeOriginalβ classf, typeA, count-, SubIFDOOOOβ (see note 8)9292SubSecTimeDigitizedβ classf, typeA, count-, SubIFDOOOOβ (see note 8)a000FlashpixVersionβ classa, typeU, count4, SubIFDMMMMβ (see note 2)a001ColorSpaceβ classb, typeS, count1, SubIFDMMMMβ valid values are 1 and 65535a002PixelXDimensionβ classc, typeI, count1, SubIFDNNNMβ picture X-dim, see note 9)a003PixelYDimensionβ classc, typeI, count1, SubIFDNNNMβ picture Y-dim, see note 9)a004RelatedSoundFileβ classe, typeA, count13, SubIFDOOOOβ (see note 10)a005InteroperabilityOffsetβ classh, typeL, count1, SubIFDNNNOβ calculated by the modulea20bFlashEnergyβ classg, typeR, count1, SubIFDOOOOβ in BCPSa20cSpatialFrequencyResponseβ classg, typeU, count-, SubIFDOOOOβ (see ISO 12233a20eFocalPlaneXResolutionβ classg, typeR, count1, SubIFDOOOOβ .a20fFocalPlaneYResolutionβ classg, typeR, count1, SubIFDOOOOβ .a210FocalPlaneResolutionUnitβ classg, typeS, count1, SubIFDOOOOβ valid values are 2 and 3a214SubjectLocationβ classg, typeS, count2, SubIFDOOOOβ in pixelsa215ExposureIndexβ classg, typeR, count1, SubIFDOOOOβ .a217SensingMethodβ classg, typeS, count1, SubIFDOOOOβ valid values are 1-5,7 and 8a300FileSourceβ classg, typeU, count1, SubIFDOOOOβ only allowed value is 3a301SceneTypeβ classg, typeU, count1, SubIFDOOOOβ only allowed value is 1a302CFAPatternβ classg, typeU, count-, SubIFDOOOOβ (see note 11)a401CustomRenderedβ classg, typeS, count1, SubIFDOOOOβ valid values are 0 and 1a402ExposureModeβ classg, typeS, count1, SubIFDRRRRβ valid values are 0,1 and 2a403WhiteBalanceβ classg, typeS, count1, SubIFDRRRRβ valid values are 0 and 1a404DigitalZoomRatioβ classg, typeR, count1, SubIFDOOOOβ .a405FocalLengthIn35mmFilmβ classg, typeS, count1, SubIFDOOOOβ .a406SceneCaptureTypeβ classg, typeS, count1, SubIFDRRRRβ valid values are 0,1,2 and 3a407GainControlβ classg, typeS, count1, SubIFDOOOOβ valid values are 0,1,2,3 & 4a408Contrastβ classg, typeS, count1, SubIFDOOOOβ valid values are 0,1 and 2a409Saturationβ classg, typeS, count1, SubIFDOOOOβ valid values are 0,1 and 2a40aSharpnessβ classg, typeS, count1, SubIFDOOOOβ valid values are 0,1 and 2a40bDeviceSettingDescriptionβ classg, typeU, count-, SubIFDOOOOβ (see note 12)a40cSubjectDistanceRangeβ classg, typeS, count1, SubIFDOOOOβ valid values are 0,1,2 and 3a420ImageUniqueIDβ classh, typeA, count33, SubIFDOOOOβ matches/[0-9a-fA-F]+\000+/
And that's every single tag, no cap. π«Ά
π Notes π
- Note 1 β The camera information in the Exif standard conforms to the APEX (Additive System of Photographic Exposure) unit system. APEX is a convenient unit for expressing exposure (Ev). The relation of APEX to other units is essentially as follows:
--------------------------------------------------------
ApertureValue (Av) = 2 log2(FNumber)
ShutterSpeedValue (Tv) = - log2(ExposureTime)
BrightnessValue (Bv) = log2(Brightness) + constant
FilmSensitivity (Sv) = log2(ASA/3.125) [not in Exif]
Exposure (Ev) = Av + Tv = Bv + Sv
--------------------------------------------------------
- Note 2 β A version tag is a sequence of four numerical characters representing the supported version of the standard (e.g.,
'0220'for version 2.2). Possible versions for Exif: 1.0, 1.1, 2.0, 2.1, 2.2 and 2.2.1. Possible versions for Flashpix: 1.0. - Note 3 β These tags indicate the time of the original-image data generation and of its storage (hardly any difference, usually). Their value is a null terminated string of the form
"YYYY:MM:DD HH:MM:SS"(note the space in the middle and the colon signs), in 24-hour format. If the tag is set, but the value is not meaningful, all numbers should be set to spaces (replacing also the colons with spaces is permitted too). See also'DateTime'in the canonical tagL<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]. - Note 4 β This tag indicates the channels of each component, arranged in order from the 1st component to the 4th. For uncompressed data the data arrangement is given in the
'PhotometricInterpretation'tag. The four numeric characters must be in the range'0'-'6', and legal combinations are'4560'(if RGB uncompressed) and'1230'(all other cases). - Note 5 β This tag indicates the status of flash when the image was shot. Bit 0 indicates the flash firing status, bits 1 and 2 indicate the flash return status, bits 3 and 4 indicate the flash mode, bit 5 indicates whether the flash function is present, and bit 6 indicates "red eye" mode. The allowed decimal values for the bit-mask are therefore 0, 1, 5, 7, 9, 13, 15, 16, 24, 25, 29, 31, 32, 65, 69, 71, 73, 77, 79, 89, 93 and 95.
- Note 6 β This tag indicates the location and area of the main subject in the overall scene. Count can be 2 (a spot defined by two coordinates), 3 (a circle defined by centre coordinates and diameter) and 4 (a rectangle defined by its centre coordinates and its dimensions).
- Note 7 β The
'UserComment'tag must start with an 8 byte "ID code", which can be"ASCII\00\00\00","JIS\00\00\00\00\00","Unicode"or eight null bytes for"undefined". The ID code identifies the character code to be used in the following. A null terminator is not required. - Note 8 β A sub-second-time tag value represents a fraction of a second, relative to the
'DateTime'tag and other such tags, as an ASCII null-terminated string made of numeric characters; an arbitrary number of spaces can be appended to the numeric characters string. If sub-second data is not known the tag value may contain only spaces. The corresponding regular expression is/\d*\s*\000/. - Note 9 β This is the valid width or height of the meaningful image (horizontal dimension does not include data padding). Overall image dimensions can be read in the SOF segment (this includes padding however).
- Note 10 β This tag is used to record the name of an audio file related to the image data: an ASCII string consisting of 8 characters +
'.'+ 3 characters, terminated by NULL. The path is not recorded. The corresponding regular expression is/\w{8}\.\w{3}\000/. - Note 11 β This tag indicates the colour filter array (CFA) geometric pattern of the image sensor when a one-chip colour area sensor is used. The first four bytes must be interpreted as two shorts giving the horizontal (m) and vertical (n) repeat pixel units. Then, m x n bytes follow, giving the actual colour filter values (in the range 0-6).
- Note 12 β This tag indicates information on the picture-taking conditions of a particular camera model, for a reader. The first four bytes must be interpreted as two shorts giving the number of display rows and columns. The following bytes must be interpreted as Unicode (UCS-2) streams, NULL terminated and including the signature. The specifics of the Unicode string are as given in ISO/IEC 10464-1. An approximation to the corresponding regular expression is
/.{4}(\376\377(.{2})*\000\000)*/.
And bestie, Adobe's Photoshop program? At least from version 7.0 on, it seems to add some non-standard tags to the Exif private tags subdirectory during the treatment of raw camera pictures. The corresponding record values are all ASCII strings ($ASCII type), and contain the description of the tags themselves. The following might be an incomplete list:
fde8β_OwnerNameβ typeA, count-, and the value begins with"Owner's Name: "fde9β_SerialNumberβ typeA, count-, value starts with"Serial Number: "fdeaβ_Lensβ typeA, count-, value starts with"Lens: "fe4cβ_RawFileβ typeA, count-, value starts with"Raw File: "fe4dβ_Converterβ typeA, count-, value starts with"Converter: "fe4eβ_WhiteBalanceβ typeA, count-, value starts with"White Balance: "fe51β_Exposureβ typeA, count-, value starts with"Exposure: "fe52β_Shadowsβ typeA, count-, value starts with"Shadows: "fe53β_Brightnessβ typeA, count-, value starts with"Brightness: "fe54β_Contrastβ typeA, count-, value starts with"Contrast: "fe55β_Saturationβ typeA, count-, value starts with"Saturation: "fe56β_Sharpnessβ typeA, count-, value starts with"Sharpness: "fe57β_Smoothnessβ typeA, count-, value starts with"Smoothness: "fe58β_MoireFilterβ typeA, count-, value starts with"Moire Filter: "
bestie just a reminder on how to read these, because the columns got a lil squished: hex code first, then the tag name, thentype, thencount(-means the count is variable, i.e. it's whatever), and then the string that the value begins with β and because these are all null terminated strings, the actual value gets a null-terminated string tacked onto the end. π
β¨ Exif tags for the 0th IFD Interoperability subdirectory β¨
So when the main image is compressed β and ngl, for a JPEG picture that's literally always β the "Design rule for Camera File system" recommendations say you should slide another IFD in below SubIFD, the Interoperability IFD, and the InteroperabilityOffset tag points at it. The legal tags live in the table below. First two columns are the tag hex codes and their names, periodt. The type column tells you the tag type: I (short or long), U (undefined), and A (ASCII, always null terminated). The count column obviously tells you the value count (- = it's variable). And the Index and Version tags are mandatory if the subIFD is present β but don't stress, this module adds them automatically if it needs to. π«Ά
0001βInteroperabilityIndexβ typeA, count4, SubIFD supportNNNM, notes:R98(THM would work for IFD1)0002βInteroperabilityVersionβ typeU, count4, SubIFD supportNNNM, notes: e.g.'0100'means 1.001000βRelatedImageFileFormatβ typeA, count-, SubIFD supportNNNO, notes: e.g.'Exif JPEG Ver. 2.1'1001βRelatedImageWidthβ typeI, count1, SubIFD supportNNNO, notes: image X dimension1002βRelatedImageLengthβ typeI, count1, SubIFD supportNNNO, notes: image Y dimension
β¨ Exif tags for the 0th IFD GPS subdirectory β¨
These next ones are the GPS girlies π β they're used for GPS attributes in the GPS IFD, which gets pointed to (if it's there) by the GPSInfo tag in IFD0 or IFD1. This standard was already a thing back in TIFF/EP, and now it's part of Exif 2.2. First two columns = tag hex codes and names. The type column is the tag type: B (byte), S (short), R (rational), U (undefined), and A (ASCII, always null terminated). The count column obviously = the value count (- means variable, as always). All GPS tags are optional in a JPEG or TIFF file β but the VersionID tag has got to be present if the GPS IFD is present. (And yes, a default 'VersionID' = (2,2,0,0), i.e. v.2.2, gets automatically added by this module if necessary. iconic behaviour tbh.)
00βGPSVersionIDβ typeB, count4β mandatory01βGPSLatitudeRefβ typeA, count2β (see note 1)02βGPSLatitudeβ typeR, count3β (see note 2)03βGPSLongitudeRefβ typeA, count2β (see note 1)04βGPSLongitudeβ typeR, count3β (see note 2)05βGPSAltitudeRefβ typeB, count1β0(sea level) or1(absolute)06βGPSAltitudeβ typeR, count1β in metres07βGPSTimeStampβ typeR, count3β hours, minutes and seconds08βGPSSatellitesβ typeA, count-β satellites used for measurement09βGPSStatusβ typeA, count2β'A'(in progr.) or'V'(interop.)0aβGPSMeasureModeβ typeA, count2β'2'(2-dim) or'3'(3-dim)0bβGPSDOPβ typeR, count1β data degree of precision0cβGPSSpeedRefβ typeA, count2β (see note 3)0dβGPSSpeedβ typeR, count1β speed of the GPS receiver0eβGPSTrackRefβ typeA, count2β (see note 4)0fβGPSTrackβ typeR, count1β (see note 5)10βGPSImgDirectionRefβ typeA, count2β (see note 4)11βGPSImgDirectionβ typeR, count1β (see note 5)12βGPSMapDatumβ typeA, count-β geodetic survey data13βGPSDestLatitudeRefβ typeA, count2β (see note 1)14βGPSDestLatitudeβ typeR, count3β (see note 2)15βGPSDestLongitudeRefβ typeA, count2β (see note 1)16βGPSDestLongitudeβ typeR, count3β (see note 2)17βGPSDestBearingRefβ typeA, count2β (see note 4)18βGPSDestBearingβ typeR, count1β (see note 5)19βGPSDestDistanceRefβ typeA, count2β (see note 3)1aβGPSDestDistanceβ typeR, count1β distance to the destination point1bβGPSProcessingMethodβ typeU, count-β location finding (see note 6)1cβGPSAreaInformationβ typeU, count-β name of the GPS area (see note 6)1dβGPSDateStampβ typeA, count11β (see note 7)1eβGPSDifferentialβ typeS, count1β0(without) or1(with) diff.corr.
π Notes: π
- A latitude or longitude reference is basically setting the sign for another (related) latitude or longitude value tag. A latitude reference can only be
'N'(for North) or'S'(for South); a longitude reference can only be'E'(for East) or'W'(for West). no in-between, she doesn't do ambiguity. - A latitude or a longitude gets stored as a sequence of three rational numbers (and each rational number is the ratio of two unsigned long integers, fyi), standing for degrees, minutes and seconds. A typical format is
(dd/1, mm/1, ss/1). Sometimes the seconds get dropped in favour of fractions of minutes (usually with two decimal places); in that case the format is(dd/1, mmmm/100, 0/1). Latitudes are limited to the interval[0,90], while longitudes are limited to[0,180]. - A "speed (distance) reference" is the unit for the speed (distance) value stored in another (related) tag. The only allowed values are
'K'(for Km/h or Km),'M'(for miles/h or miles) or'N'(knots). And can we just appreciate the fact that knot in English is both a unit of speed (one nautical mile per hour) and of distance (one nautical mile). the language ate that one π - A direction reference says how you should interpret a following direction value. Only two references are possible:
'T'(for the true direction) or'M'(for the magnetic direction). - 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.00and359.99. - The processing method and the area information are character strings, and their first character specifies the character code being used β it's the first character of the 8-byte character code identification in the
'UserComment'tag in the SubIFD. So'A'means ASCII,'J'means JIS,'U'means Unicode, and a null character means undefined. And since the type is not ASCII, null termination is not required here. - A date tag value is a null terminated string of the form
"YYYY:MM:DD"(note the colon signs, bestie, colons not dashes). [I currently allow only years after 1800].
β¨ Valid tags for Photoshop-style APP13 data β¨
The structure of a Photoshop-style APP13 segment gets introduced over in section "Structure of a Photoshop-style APP13 segment" in Image::MetaData::JPEG::Structures. go read that if you want the full lore π¦
Non-IPTC data (visual rendering - Photoshop variables)
This section contains only the list of valid Image Resource ID's β and heads up, not all file formats use all ID's, and some information may be stored somewhere else in the file entirely. In the following list, 'PS' stands for Photoshop, and 'Pstring' for Pascal string:
...and the hex codes keep going, bestie, don't panic, we're almost at the end of the Photoshop list π
3e8Photoshop2Infoβ [obsolete] (PS.2.0) General information3e9MacintoshPrintInfoβ [optional] Macintosh print manager info3ebPhotoshop2ColorTableβ [obsolete] (PS.2.0) Indexed colour table3edResolutionInfoβ see appendix A in Photoshop SDK3eeAlphaChannelsNamesβ as a series of Pstrings3efDisplayInfoβ see appendix A in Photoshop SDK3f0PStringCaptionβ [optional] the caption, as a Pstring3f1BorderInformationβ border width and units3f2BackgroundColorβ see additional Adobe information3f3PrintFlagsβ labels, crop marks, colour bars, ecc...3f4BWHalftoningInfoβ Gray-scale and multich. half-toning info3f5ColorHalftoningInfoβ Colour half-toning information3f6DuotoneHalftoningInfoβ Duo-tone half-toning information3f7BWTransferFuncβ Gray-scale and multich. transfer function3f8ColorTransferFuncsβ Colour transfer function3f9DuotoneTransferFuncsβ Duo-tone transfer function3faDuotoneImageInfoβ Duo-tone image information3fbEffectiveBWβ effective black and white values3fcObsoletePhotoshopTag1β [obsolete] ??3fdEPSOptionsβ Encapsulated Postscript options3feQuickMaskInfoβ channel ID plus initial state flag3ffObsoletePhotoshopTag2β [obsolete] ??400LayerStateInfoβ index of target layer (0means bottom)401WorkingPathInfoβ should not be saved to the file402LayersGroupInfoβ for grouping layers together403ObsoletePhotoshopTag3β [obsolete] ??404IPTC/NAAβ seeL</Valid tags for IPTC data>405RawImageModeβ image mode for raw format files406JPEGQualityβ [private]408GridGuidesInfoβ see additional Adobe information409ThumbnailResourceβ see additional Adobe information40aCopyrightFlagβ true if image is copyrighted40bURLβ text string with a resource locator40cThumbnailResource2β see additional Adobe information40dGlobalAngleβ global lighting angle for effects layer40eColorSamplersResourceβ see additional Adobe information40fICCProfileβ see notes from Internat. Color Consortium410Watermarkβ one byte411ICCUntaggedβ1means intentionally untagged412EffectsVisibleβ1byte to show/hide all effects layers413SpotHalftoneβ version, length and data414IDsBaseValueβ base value for new layers ID's415UnicodeAlphaNamesβ length plus Unicode string416IndexedColourTableCountβ (PS.6.0)2bytes417TransparentIndexβ (PS.6.0)2bytes419GlobalAltitudeβ (PS.6.0)4bytes41aSlicesβ (PS.6.0) see additional Adobe info41bWorkflowURLβ (PS.6.0)4bytes length + Unicode string41cJumpToXPEPβ (PS.6.0) see additional Adobe info41dAlphaIdentifiersβ (PS.6.0)4*(n+1)bytes41eURLListβ (PS.6.0) structured Unicode URL's421VersionInfoβ (PS.6.0) see additional Adobe info7d0-bb6PathInfo_%3xβ see additional Adobe info (saved path)bb7ClippingPathNameβ see additional Adobe info2710PrintFlagsInfoβ see additional Adobe info
π IPTC data (Editorial information and envelope record) π
Okay so this next bit is a whole vibe of its own. The structure of an IPTC stream is introduced in section "Structure of an IPTC data block" in Image::MetaData::JPEG::Structures. This section contains only the list of valid IPTC tags.
Since the use of APP13 for IPTC information in a JPEG picture is not a real standard, it is not clear which subset of IPTC should be considered valid π my current guess is that only editorial IPTC datasets (2:xx) and, more rarely, some envelope datasets (1:xx, which are however needed for non ASCII character sets) are found.
Numeric tag values (record keys), in the first column, are in decimal notation, and they are followed by tag names in the second column. The presence of N in the third column means that the record is non-repeatable (i.e., there should not be two such records in the file). The following number or range in square brackets indicates valid lengths for the record data field. The final comment specifies additional format constraints, sometimes in natural language:
/regex/means that the string must match the regular expression regex β¨invalidmeans that this valid IPTC tag is not used in JPEG pictures π- other formats are specified in the notes
π Note that IPTC strings are stored in records with an explicit length, so they do not need the final null character (they are not C-strings). Periodt.
1:xx datasets from the envelope record (seldom used)
0ModelVersionβN,[2,], binary, always4in JPEGs?5Destinationβ[1-1024], word (see note 1)20FileFormatβN,[2], invalid, binary22FileFormatVersionβN,[2], invalid, binary (see 1:20)30ServiceIdentifierβN,[<=10], word (see note 1)40EnvelopeNumberβN,[8], invalid,/\d{8}/50ProductIDβ[<=32], word (see note 1)60EnvelopePriorityβN,[1], invalid,/[1-9]/70DataSentβN,[8], invalid, date (see note 2)80TimeSentβN,[11], invalid, time (see note 3)90CodedCharacterSetβN,[<=32], character set (see note 4)100UNOβN,[14-80], invalid (eternal identifier)120ARMIdentifierβN,[2], invalid, binary122ARMVersionβN,[2], invalid, binary
2:xx datasets from the application record (editorial tags)
0RecordVersionβN,[2], binary, always2in JPEGs ?3ObjectTypeReferenceβN,[3-67],/\d{2}:[\w\s]{0,64}?/4ObjectAttributeReferenceβ[4-68],/\d{3}:[\w\s]{0,64}?/5ObjectNameβN,[<=64], line (see note 5)7EditStatusβN,[<=64], line (see note 5)8EditorialUpdateβN,[2],/01/10UrgencyβN,[1],/[1-8]/12SubjectReferenceβ[13-236], complicated, see note 715CategoryβN,[<=3],/[a-zA-Z]{1,3}?/20SupplementalCategoryβ[<=32], line (see note 5)22FixtureIdentifierβN,[<=32], word (see note 1)25Keywordsβ[<=64], line (see note 5)26ContentLocationCodeβ[3],/[A-Z]{3}/27ContentLocationNameβ[<=64], line (see note 5)30ReleaseDateβN,[8], date (see note 2)35ReleaseTimeβN,[11], time (see note 3)37ExpirationDateβN,[8], date (see note 2)38ExpirationTimeβN,[11], time (see note 3)40SpecialInstructionsβN,[<=256], line (see note 5)42ActionAdvisedβN,[2],/0[1-4]/45ReferenceServiceβ[10], invalid (see 1:30)47ReferenceDateβ[8], invalid (see 1:70)50ReferenceNumberβ[8], invalid (see 1:40)55DateCreatedβN,[8], date (see note 2)60TimeCreatedβN,[11], time (see note 3)62DigitalCreationDateβN,[8], date (see note 2)63DigitalCreationTimeβN,[11], time (see note 3)65OriginatingProgramβN,[32], line (see note 5)70ProgramVersionβN,[<=10], line (see note 5)75ObjectCycleβN,[1],/a|p|b/80ByLineβ[<=32], line (see note 5)85ByLineTitleβ[<=32], line (see note 5)90CityβN,[<=32], line (see note 5)92SubLocationβN,[<=32], line (see note 5)95Province/StateβN,[<=32], line (see note 5)100Country/PrimaryLocationCodeβN,[3],/[A-Z]{3}/101Country/PrimaryLocationNameβN,[<=64], line (see note 5)103OriginalTransmissionReferenceβN,[<=32], line (see note 5)105HeadlineβN,[<=256], line (see note 5)110CreditβN,[<=32], line (see note 5)115SourceβN,[<=32], line (see note 5)116CopyrightNoticeβN,[<=128], line (see note 5)118Contactβ[<=128], line (see note 5)120Caption/AbstractβN,[<=2000], line with CR and LF122Writer/Editorβ[<=32], line (see note 5)125RasterizedCaptionβN,[7360], binary data (460x128 PBM)130ImageTypeβN,[2],/[0-49][WYMCKRGBTFLPS]/131ImageOrientationβN,[1],/P|L|S/135LanguageIdentifierβN,[2-3],/[a-zA-Z]{2,3}?/150AudioTypeβN,[2],/[012][ACMQRSTVW]/151AudioSamplingRateβN,[6],/\d{6}/152AudioSamplingResolutionβN,[2],/\d{2}/153AudioDurationβN,[6], duration (see note 6)154AudioOutcueβN,[<=64], line (see note 5)200ObjDataPreviewFileFormatβN,[2], invalid, binary (see 1:20)201ObjDataPreviewFileFormatVerβN,[2], invalid, binary (see 1:22)202ObjDataPreviewDataβN,[<=256000], invalid, binary
Notes π
- A "word" is made of elements of what the IPTC standard calls the "graphic characters" set β aka literally every character that has a visual representation. Control codes, the space character and the DEL character are NOT graphic characters. And bestie, note that the visual representation of a graphic character depends upon the character set invoked at the time of evaluation. A "word" is matched by the following regular expression:
/^[^\000-\040\177]*$/. - A date is stored, in conformity to the ISO 8601 standard, as the eight character string
'CCYYMMDD'β so'19890317'means March 17th 1989, periodt. A date string is matched by the following regular expression:/\d{4}(0\d|1[0-2])([0-2]\d|3[01])/. Currently, I allow only years after 1800; but'DateCreated'has no limitation, since it refers to the creation date of the photographed object, not to the creation of the photo itself. π - A time is stored, in conformity to the ISO 8601 standard, as the eleven character string
'HHMMSS+/-HHMM'β like'090000-0500'means 9AM, 5 hours behind the coordinated universal time. A time string is matched by the following regular expression:/([01]\d|2[0-3])[0-5]\d[0-5]\d[\+-]([01]\d|2[0-3])[0-5]\d/. π - This dataset selects a character set, for use in character oriented datasets in records 2-6, according to the "International Register of Coded Character Sets" (ISO/IEC 2022 and ISO/IEC 2375, see for instance
http://www.itscj.ipsj.or.jp/ISO-IR/), and typically consist of the escape control character followed by one or more graphic characters. For instance,"\033/A"refers to ISO-8859-1 (latin-1) and"\033%G"refers to UTF-8 (a Unicode encoding). β¨ - A "line" is made of graphic characters (see note 1) and space. This is matched by the following regular expression:
/^[^\000-\037\177]*$/. - A "duration" is stored like a "time", but there is no time zone spec β which means the string is only six characters wide (see also note 3). β³
- The complicated regular expression for the SubjectReference is the following:
/[$validchar]{1,32}?:[01]\d{7}(:[$validchar\s]{0,64}?){3}/, where$validcharis'\040-\051\053-\071\073-\076\100-\176'. Yeah, it's giving unhinged regex, but we love her. π
π AUTHOR
Stefano Bettelli, bettelli@cpan.org
π COPYRIGHT 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 General Public License. See the COPYING and LICENSE file for the license terms.
π SEE ALSO
The main documentation page for the Image::MetaData::JPEG module.
and that's a wrap bestie!! π this whole thing ships as part of perl v5.34.0, dated 2022-03-07 β go forth and read your tags, you absolute icon π¦π
π¦ where this page comes from
- debian bookworm: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- debian trixie: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- ubuntu noble: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- ubuntu resolute: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- ubuntu stonking: libimage-metadata-jpeg-perl 0.159-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms