## 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