D70Reader: What It Does

Nikon D70, D50, D100, D2H, D2X, and D200 Cameras
It is all about the data that is embedded in each image you take with the D70, or any other digital camera. The D70Reader will extract that data in readable form, from the image file. Photoshop also does this, but it also likes to drop some of it on the floor! In using Photoshop CS, I was not able to find a way to cut and paste the information. I could not do this, so that I could send it in an email message, etc. I ended up transferring the data by re-typing it. That is why I originally wrote the program.

Here is an example of EXIF data taken directly from the camera in a NEF image:

D70ReaderProgramVersion 0.18
Filename DSC_0001.NEF
Make NIKON CORPORATION
Model NIKON D70
Orientation Horizontal (normal)
Software Ver.1.02
ExposureTime 1/200 seconds
FNumber 7.100000
ExposureProgram Auto
DateTimeDigitized 2005:02:03 10:00:31
ExposureBiasValue 0.000000
MeteringMode Multi-segment
Flash No Flash
FocalLength 70mm
UserComment
FocalLengthIn35mmFilm 105mm
ISOUsed 200
Quality RAW
WhiteBalance AUTO
Sharpening AUTO
FocusMode AF-S
FlashSetting NORMAL
FlashMode
ISOSet 200
ToneCompensation AUTO
LensType G
Lens 18-70mm f/3.5-4.5
LensInfo 40 01 0c 00
ColorMode MODE1a
LightSource NATURAL
NoiseReduction OFF
ShutterCount 1766
ImageOptimization
Saturation NORMAL
VariProgram AUTO

Here is the EXIF data after being processed by Adobe Photoshop CS:

D70ReaderProgramVersion 0.17
Filename DSC_0001.JPG
Make NIKON CORPORATION
Model NIKON D70
Orientation Horizontal (normal)
Software Adobe Photoshop CS Windows
ExposureTime 1/200 seconds
FNumber 7.100000
ISOSpeedRatings 200
ExposureBiasValue 0.000000
MeteringMode Multi-segment
Flash No Flash
FocalLength 70mm
ExifImageWidth 3008
ExifImageLength 2000
FocalLengthIn35mmFilm 105mm

Notice all the data that is missing!

Now, Adobe Photoshop CS embeds XMP data for the above image, and the D70Reader can dump it, along with the above data:

D70ReaderProgramVersion 0.18
Filename DSC_0001.JPG
Make NIKON CORPORATION
Model NIKON D70
Orientation Horizontal (normal)
Software Adobe Photoshop CS Windows
ExposureTime 1/200 seconds
FNumber 7.100000
ISOSpeedRatings 200
ExposureBiasValue 0.000000
MeteringMode Multi-segment
Flash No Flash
FocalLength 70mm
ExifImageWidth 3008
ExifImageLength 2000
FocalLengthIn35mmFilm 105mm
WhiteBalance As Shot
DateTimeDigitized 2005:02:03 10:00:31
FlashMode
FlashSetting NORMAL
ColorMode Unknown
Lens 18.0-70.0 mm f/3.5-4.5

But, as you see, it is still missing some of the original EXIF data!

The D70Reader can dump the full XMP data stream:

// Dumping MetaXAP tree for "uuid:190794a1-8b6a-11d9-b307-da58010faa69"

http://ns.adobe.com/camera-raw-settings/1.0/
    Version = "2.2"
    RawFileName = "DSC_0001.NEF"
    WhiteBalance = "As Shot"
    Exposure = "0.00"
    Shadows = "5"
    Brightness = "50"
    Contrast = "+25"
    Saturation = "0"
    Sharpness = "25"
    LuminanceSmoothing = "0"
    ColorNoiseReduction = "25"
    ChromaticAberrationR = "0"
    ChromaticAberrationB = "0"
    VignetteAmount = "0"
    ShadowTint = "0"
    RedHue = "0"
    RedSaturation = "0"
    GreenHue = "0"
    GreenSaturation = "0"
    BlueHue = "0"
    BlueSaturation = "0"

http://ns.adobe.com/exif/1.0/
    ExposureTime = "1/200"
    ShutterSpeedValue = "7643856/1000000"
    FNumber = "71/10"
    ApertureValue = "5655638/1000000"
    DateTimeOriginal = "2005-02-03T10:00:31-05:00"
    ExposureBiasValue = "0/1"
    MaxApertureValue = "43/10"
    MeteringMode = "5"
    FocalLength = "70/1"
    FocalLengthIn35mmFilm = "105"
    ISOSpeedRatings : seq
        *[1] = "200"
    Flash
        Fired = "False"
        Return = "0"
        Mode = "0"
        Function = "False"
        RedEyeMode = "False"
    ColorSpace = "4294967295"
    PixelXDimension = "3008"
    PixelYDimension = "2000"

http://ns.adobe.com/exif/1.0/aux/
    Lens = "18.0-70.0 mm f/3.5-4.5"

http://ns.adobe.com/pdf/1.3/
    Creator = "Adobe Photoshop CS Windows"
    ModDate = "2005-03-02T17:26:18-05:00"
    CreationDate = "2005-03-02T17:26:18-05:00"

http://ns.adobe.com/photoshop/1.0/
    History = ""

http://ns.adobe.com/tiff/1.0/
    Make = "NIKON CORPORATION"
    Model = "NIKON D70"
    Orientation = "1"
    XResolution = "300/1"
    YResolution = "300/1"
    ResolutionUnit = "2"

http://ns.adobe.com/xap/1.0/
    CreatorTool = "Adobe Photoshop CS Windows"
    ModifyDate = "2005-03-02T17:26:18-05:00"
    CreateDate = "2005-03-02T17:26:18-05:00"
    MetadataDate = "2005-03-02T17:26:18-05:00"
    Format = "image/jpeg"

http://ns.adobe.com/xap/1.0/mm/
    DocumentID = "adobe:docid:photoshop:190794a0-8b6a-11d9-b307-da58010faa69"

http://purl.org/dc/elements/1.1/
    format = "image/jpeg"

// End of tree dump for "uuid:190794a1-8b6a-11d9-b307-da58010faa69"

But again, it is not all of the original EXIF data, from the original NEF file.

Now, the D70Reader gives you a number of options. You may not be interested in any of them. But, some people will be. Here is a list:

Format:
    d70reader [options] imageFileName
    d70reader [options] *.NEF *.JPG
  
    Options:
  
    -h                  = this screen
    -s                  = sort the standard output
    -v                  = verbose (raw data)
    -w                  = generate HTML table
    -x                  = generate XML data tree
    -c                  = generate Comma Separated Values (CSV) data
    -js                 = generate JavaScript Array data
    -j                  = extract JPG thumbnail image from NEF
    -njf                = create JPG FINE image from NEF
    -cwb                = use Camera WhiteBalance (with -njf)
    -awb                = use Auto WhiteBalance (with -njf)
    -crgb               = use Camera RGB (with -njf)
    -noclip             = don't Clip Colors (with -njf)
    -br:n.n             = set Image Brightness (default = 1.0) (with -njf)
    -red:n.n            = set Red Multiplier (default = 1.0) (with -njf)
    -blue:n.n           = set Blue Multiplier (default = 1.0) (with -njf)
    -fd                 = fix the internal dates of an image file
    -rm                 = remove all EXIF data from JPG file
    -re nefFile jpgFile = restore EXIF data to target JPG file
    -web                = generate Photo Website
    -cf:configFile      = use alternate configuration file
    -od:\outputDir\     = use specified output directory
The -s option will allow you to sort the data, before it is displayed to standard output.

The -v option will allow you to see the raw data (like the XMP data above).

The -w option will generate an HTML table of the data, that can be embedded in a web site.

The -x option will generate an XML data tree of the data. This is useful for only certain situations.

The -c option generates CSV data. This can be imported into a spreadsheet, or a database, so that you can keep track of your image data.

The -js option will allow you to create JavaScript array data, that can be used to create a web based slideshow of your images.

The -j option will extract the JPG thumbnail image from the NEF image file. With the D70Reader, you can process a whole directory of NEF image files, in a very short time, and extract the JPG images. The images will be automatically rotated, for proper display. This means that you do not have to shoot RAW + JPG anymore, and put more images on your CF card.

The above -j option has been modified to correctly place each data element in the proper bucket, instead of all at the lowest level. This means that other applications can now correctly read the EXIF data in the extracted thumbnail images.

The -njf option will create a JPG FINE image file from a NEF image file. With the D70Reader, you can process a whole directory of NEF image files, in a very short time, and create the JPG images. The images will be automatically rotated, for proper display. There are seven sub-options that can be used to control the image output. These options are labeled to be used with the -njf option. The created image files are placed in a new directory called .\jpegfine. The original NEF files are not modified in any way.

The -fd option will allow you to fix the internal dates within the image file. This is helpful, if the user never set the camera date and time, shot dozens of images, and now wants to correct the problem. The created image files are placed in a new directory called .\fixdate. The original files are not modified in any way.

The -rm option allows you to remove all EXIF data from a JPG image. A label of "NOEXIF_" is prepended to the image file name. The original image file is not modified in any way.

The -re option allows you to restore the EXIF data that certain image packages strip from their processed images. So, you can copy the original EXIF data from the NEF/Raw image file into the processed JPG file. Now, you can have your EXIF data, and your post-processed JPG image in one file! A new file is created with a label of "EXIF" prepended just before the .JPG extension. The original files are not modified in any way.

The -web option will generate a complete web site of your photographs from within a directory. The text displayed on the screen is now controlled with a configuration file. To customize the displayed text, just modify the text in the file before generating the photo web site. Here is an example web site:

Sample Photo Gallery Web Site

Links for downloading the program:

Windows XP / Windows 2000 Program Files

Slackware 10.0 Linux Program Files

Mac OS X 10.4 (Tiger) Program Files

I hope this explains what this program is all about.

Jon Oman
joman@gogebic-pc.com