ParseImageTags ReadMe

Camera Summary ReadMe Canon 1Ds All Tags.
Canon 1Ds II All Tags.
Canon 20D All Tags.
Fuji S2 All Tags.
Fuji S3 All Tags.
Kodak SLR/n All Tags.
Leaf Valeo All Tags.
Lecia Digilux 2 All Tags.
Lecia AGR9 All Tags.
Nikon D100 All Tags.
Nikon D1X All Tags.
Nikon D1X DNG All Tags.
Nikon D2H All Tags.
Nikon D2X All Tags.
Nikon D70 All Tags.
Nikon D70S All Tags.
Adobe CS TIFF All Tags
Sony F828 All Tags Olympus E300 All Tags Leaf Aptus All Tags


  showImageTags.c        Dumps Image Tag information
  Copyright (c) 2005 Rags Int., Inc. by Rags Gardner
  rags@rags-int-inc.com.com
  http//www.rags-int-inc.com
  V1.01  07/14/2005   Beta Release

Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation.   This software is provided "as is" without express or implied warranty.

It is a simple command line utility.   I am compiling with MS Visual C V6.   I will distribute a compiled executable and the MS project files for those that want to use this for additional camera testing or as a base for other projects.   It has also been compiled on Mac OS.   It should also compile on a Linux or Unix system.   I can only provide a Windows executable at this time.

This utility includes routines for TIFF, EXIF, IPTC, and MakerNotes parsing. It also has a crude parser for JPG markers so we can find the same tags in a JPG image.


Introduction

There is no intent to do any image processing with this utility.   The objective is simply to validate the image file format and display any image tags that can be found.   This will include JPEG markers, TIF tags, EXIF tags, IPTC tags, and EXIF Makernotes tags.   The tag names and values shown will be based on known standards.   There is no standard for Makernotes tags, so only a best effort guess as to the meaning of these can be provided.

With that in mind, all tags that can be found can be displayed.   The default report shows only some of the tags, enumerated to show their useful meanings.   These will primarily be the known tags that relate to camera settings and color information.  

Usage

   usage: showImageTags [-?]
      [-d] debug on
      [-e] show EXIF tags
      [-f] produce report to text file
      [-h] show headers in hex
      [-i] show IPTC tags
      [-m] show MKNT tags
      [-o n] use offset "n" for header start
      [-p] show file position for tags
      [-r] show rational type as nn/dd
      [-s] search for header fragment(s)
      [-t] show TIFF tags
      [-v] verbose; show all tags
      [file1 [file2...]]

The basic report can be run with no options.   This will display the known tags of interest, to me at least.   It will also produce a summary of the tags found and any exceptions.

   FujiS3.RAF is a FUJIFILM: FinePix S3Pro   image created on 2004:01:10 04:00:53
   Format[TIFF 6.0], ByteOrder[littleEndian]
   TiffTags(23), TiffIfdCount(2), ExifTags(41), MakerNoteTags(24), IptcTags(0), XmpTags(0), CiffTags(0)
   Unknown Tags: TIFF(1), EXIF(1)

This shows the file name, manufacturer, model, and date created.   Next it identifies the basic standards being followed and the byteOrder of the data.   Then, a count of the tags found by type.   If there are any unknown or invalid tags, this count is also shown.   The exceptions are noted in the detail lines.

   tiff Sensing Method(2): One-chip color area sensor
   exif Subject Distance Range(0): Unknown
   mknt White Balance Setting: PRESET0
   TIFF --- Unknown Tag: 50341, type(7), len(106)

Detail lines are shown with the prefix in lowercase.   They are displayed or enumerated according to the standards documentation.   Uknown tags or invalid values are noted within the messages and counted.   There are no documented standards for MakerNotes, so only a best effort can be provided regarding any tag meanings, and errors are not counted.

The [-f] option sends the report to a text file.   This will be in the same folder as the image file.   It will have the same base name as the image file with "_rpt.txt" added as a new extension.

The [-o n] option specifies an offset from the begining of the file to start processing TIFF headers.   This is necessary for some images such a Fuji where there is a private header at the beginning of the file.   The [-s] option may be used to search for TIFF headers if the offset is unknown.

The [-v] option is used to produce a report of all tags, even if unknown. This will show the tag ID in decimal and hex.   It will show the type of data such as string, number, or bytes.   It will show the length of the data, which is really more correctly described as the number of entries of that type.   A short sample of the data values are also shown, based on the type.

The length depends on the tag’s type.   For example, an integer with a length of two means two integers, not a 2-byte integer.   When the length is unreasonable, only a few data items will be displayed.

   TIFF Tag(282) 0x11a Type(5) urational(1) ISO XResolution: 300.000
   EXIF Tag(37381) 0x9205 Type(5) urational(1) MaxApertureValue: 3.000
   MKNT Tag(145) 0x91 Type(7) undef(630) ???: 0x303230347905c0d8be0413803021d2

The [-e], [-i], [-m], and [-t] options are used to select only one or more types of tags to be shown.  

The [-h] option will display headers such as the first bytes in the file, the TIFF header, and the Makernotes header can be displayed in hex.   This is to help identify non-compliant formats and provide some clues as to how the data might be parsed.

The remaining options are useful for debugging.

TIFF Tags

A few comments about the basic TIFF tags.   The TIFF tags start with an 8 byte header.   This identifies the byteOrder of the numeric data, the TIFF version that must be 42, and an offset to the first set of tags.   This offset is called the “doff” or data offset to the first Image File Descriptor or IFD.

The IFD starts with two bytes that contain the number of entries (tags) followed by an array of the tags themselves.  

Each tag is 12 bytes in size.   It consists of an identification number, the type of data, a count of the data values (items), and either the data if it is 4 bytes or less or a pointer to the data.   Thus, the actual data is frequently somewhere else in the file.

There are 12 valid data types including undefined and simply a string of bytes.   The most interesting type is rational, signed or unsigned.   Each such entry consists of a pair of numbers used as a numerator and denominator.   This is how decimal precision is achieved.   The floating-point types double and float are supported but usually unused since they have platform dependencies.


Rags Gardner
Rags Int., Inc.
204 Trailwood Drive
Euless, TX 76039
(817) 267-2554
Send Email
www.rags-int-inc.com
July 15, 2005

This page last updated on: Thursday April 12 2007
You are visitor number 2,889 since 07/19/05