Inside Nikon image adjustments

THe Nikon image adjustments (aka. filters) are the following:

Adjustment parameters

An adjustment parameter is characterized by its name, its type, and its value. Parameter type may be implicit or explicit. An explicit type is expressed by a tag name (integer, double…) and within an attribute defining the parameter name (name, id…). An implicit type is not specified, the tag name only defines the parameter name.

<SelectedPictureControl>0</SelectedPictureControl>

<double name="rotateAngle">0</double>

Adjustment parameters type

  • binary: is a binary string encoded in Base64. The attribute name define the parameter name. (seems similar to Export parameters)

    <binary name="Data">AAAAAADI...AAAAAA</binary>
    
  • double: a decimal number or a double precision (64 bits) floating number. The attribute name define the parameter name.

    <double name="rotateAngle">0</double>
    
  • integer: a decimal number, a single precision (32 bits) floating number or a boolean value with true or false [1]. The attribute name define the parameter name.

    <integer name="autoCrop">0</integer>
    
  • dateAndTime: a date and time stamp expressed as a set of tags (year, month, day, hour, minute and second). The date 1900-1-1 00:00:00 seems to be default value.

    <dateAndTime>
       <year>1900</year>
       <month>1</month>
       <day>1</day>
       <hour>0</hour>
       <minute>0</minute>
       <second>0</second>
    </dateAndTime>
    
  • points: a set of 2D coordinates expressed as a set of tags pointOfPoints with the attributes x and y. The attribute name define the parameter name.

    <points name="QuickFixToneCurve.pointsOut">
       <pointOfPoints x="0" y="0"/>
       <pointOfPoints x="1" y="1"/>
    </points>
    
  • point: a 2D coordinates expressed as a set of attributes (x and y). The attribute name define the parameter name. Please note that data structure is not the same than points above.

    <point name="cropStart" x="991" y="546"/>
    
  • data: a text string. The attribute id define the parameter name.

    <data id="app:softname">Nikon Transfer 2.13 W</data>
    

The list below exposes particular cases of implicit adjustment parameters.

  • Export: a binary string expressed as a set of two elements: ExportData and ExportDataSize. ExportData is a binary string encoded in Base64. ExportDataSize is the length of the encoded string.

    <Export>
       <ExportData>TkNQAAAAAAEAAAA...AAA==</ExportData>
       <ExportDataSize>74</ExportDataSize>
    </Export>
    
  • map: similar to Export but with mapData and mapSize as elements

    <map>
       <mapdata>rhn0ugeaaa.../qkpfvli</mapdata>
       <mapsize>174338</mapsize>
    </map>
    
  • historystep: an ordered list whose entries are tagged vith historystep. Each entry (aka. step) is an unitary image adjustment to apply to the image. For example, cropping an image should be done after image processing modifying the image size as lens correction or perspective controls).

    <historystep>
       <version>20</version>
          <feather>0</feather>
          ...
          <filter id="nik::AdaptivePaste">
          ...
          </filter>
    </historystep>
    <historystep>
       <version>20</version>
          <feather>0</feather>
          ...
          <filter id="nik::Newton">
          ...
          </filter>
    </historystep>
    
  • adjustmentData: an obscure data structure with one item named NkOneStepAdjustment expressed as a boolean:

    <adjustmentData>
        <data id="NkOneStepAdjustment">true</data>
    </adjustmentData>
    

Notes