27 - Layered File Format

Rules:
------
tags are 8, 8-bit chars
tags are followed by a chunk size, a 64-bit integer (8 bytes, unsigned)
chunk of size follows, unless chunk size is zero

File content:
-------------
first, file ID group, in this specific order:
{
    ELF16BIT (chunksize=0)
    EVERSION (chunksize) integer, file format version
    EKEYVALU (chunksize) integer, 0x1F4B8C3D
}
Next, after file ID group
{
    First, master information group, in any order:
    {
        MST_NAME (chunksize) name of master
        MST_ANNO (chunksize) annotation of master
        MST_CPYR (chunksize) copyright of master
        MST_AUTH (chunksize) author of image
        MST_SOFT (chunksize) software involved with image
        MST_CTIM (chunksize) image creation time: "YYYYMMDD:HHMMSS GMT"
        MST_MTIM (chunksize) image modification time: "YYYYMMDD:HHMMSS GMT"
        MST_LATI (chunksize) double as text, decimal latitude in degrees
        MST_LONG (chunksize) double as text, decimal longitude in degrees
        MST_ALTI (chunksize) double as text, decimal altitude in meters
        MST_SHUT (chunksize) double as text, decimal shutter speed
        MST_APER (chunksize) double as text, decimal aperture
        MST_FOCA (chunksize) double as text, decimal focal length
        MST_ISOS (chunksize) double as text, decimal ISO sensitivity
        MASTERXD (chunksize) integer, width of master
        MASTERYD (chunksize) integer, height of master
        MST_XDPI (chunksize) integer, master X DPI
        MST_YDPI (chunksize) integer, master Y DPI
    }
    Next, allocation signal:
    {
        MAST_KEY (chunksize=0) signal to allocate the master image memory
    }
    Next, note information, if any:
    {
        MST_INOT (chunksize) text of note
        MST_INPU (chunksize) character, either 'T' or 'F' - note public flag
        MST_INAM (chunksize) integer, area mode
        MST_INTX (chunksize) integer, text X position
        MST_INTY (chunksize) integer, text Y position
        MST_INAX (chunksize) integer, anchor X position
        MST_INAY (chunksize) integer, anchor Y position
        MST_INEX (chunksize) integer, extent X position
        MST_INEY (chunksize) integer, extent Y position
        MST_INOP (chunksize) double as text, opacity 0-1
        if there are freehand/polygon points:
        {
            MST_INPX (chunksize) integer, point X position
            MST_INPY (chunksize) integer, point Y position
        }
        MST_INBU (0 chunksize) built note command
    }
}
Next, layer information, FOR EACH LAYER, in highest-to-lowest layer order:
{
    First, basic layer information group, tags in any order:
    {
        LAY_NAME (chunksize) Layer name
        LAY_ANNO (chunksize) annotation of layer
        LAY_CPYR (chunksize) copyright of layer
        LAY_AUTH (chunksize) author of image
        LAY_SOFT (chunksize) software involved with image
        LAY_CTIM (chunksize) image creation time: "YYYYMMDD:HHMMSS GMT"
        LAY_MTIM (chunksize) image modification time: "YYYYMMDD:HHMMSS GMT"
        LAY_LATI (chunksize) double as text, decimal latitude in degrees
        LAY_LONG (chunksize) double as text, decimal longitude in degrees
        LAY_ALTI (chunksize) double as text, decimal altitude in meters
        LAY_SHUT (chunksize) double as text, decimal shutter speed
        LAY_APER (chunksize) double as text, decimal aperture
        LAY_FOCA (chunksize) double as text, decimal focal length
        LAY_ISOS (chunksize) double as text, decimal ISO sensitivity
        LAY_XWID (chunksize) integer, of layer width
        LAY_YWID (chunksize) integer, of layer height
        LAY_XDPI (chunksize) integer, of layer X DPI
        LAY_YDPI (chunksize) integer, of layer Y DPI
        LAY_XCEN (chunksize) integer, X center of layer (this is a user-assigned value)
        LAY_YCEN (chunksize) integer, Y center of layer (this is a user-assigned value)
        LAY_COMP (chunksize) character, either 'T' or 'F' - compression flag
    }
    Next, allocation signal:
    {
        LAYERKEY (chunksize=0) signal to allocate the layer memory
    }
    Next, note information, if any:
    {
        LAY_INOT (chunksize) text of note
        LAY_INPU (chunksize) character, either 'T' or 'F' - note public flag
        LAY_INAM (chunksize) integer, area mode
        LAY_INTX (chunksize) integer, text X position
        LAY_INTY (chunksize) integer, text Y position
        LAY_INAX (chunksize) integer, anchor X position
        LAY_INAY (chunksize) integer, anchor Y position
        LAY_INEX (chunksize) integer, extent X position
        LAY_INEY (chunksize) integer, extent Y position
        LAY_INOP (chunksize) double as text, opacity 0-1
        if there are freehand/polygon points:
        {
            LAY_INPX (chunksize) integer, point X position
            LAY_INPY (chunksize) integer, point Y position
        }
        LAY_INBU (0 chunksize) built note command
    }
    Next, layer extended information group, tags in any order:
    {
        LAY_MODE (chunksize) integer, layer blend mode
        LAY_XOFF (chunksize) integer, layer x displacement relative to master or other layer
        LAY_YOFF (chunksize) integer, layer y displacement relative to master or other layer
        LAY_OPAC (chunksize) double as text, layer opacity in range 0...1
        LAY_ROTA (chunksize) double as text, layer rotation in degrees, 0...360
        LAY_FRXX (chunksize) double as text, fractional pixel x offset, 0...1
        LAY_FRYY (chunksize) double as text, fractional pixel y offset, 0...1
        LAY_FACT (chunksize) double as text, factor for layer mode, 0...1
        LAY_VISI (chunksize) character, either 'T' or 'F' - layer visible flag
        LAY_LOCS (chunksize) character, either 'T' or 'F' - layer local stack flag
        LAY_GLOM (chunksize) character, either 'T' or 'F' - layer global mask flag
        LAY_LOKS (chunksize) character, either 'T' or 'F' - layer lockstep flag
        LAY_RCHN (chunksize) compressed* block of 16-bit unsigned red data
        LAY_GCHN (chunksize) compressed* block of 16-bit unsigned green data
        LAY_BCHN (chunksize) compressed* block of 16-bit unsigned blue data
        LAY_ACHN (chunksize) compressed* block of 16-bit unsigned alpha data
    }
    next:
    {
        LAYERBLD (chunksize=0) signal to build this just-specified layer
    }
}

Developer explanation of warp layers:

For warp layers, the data in the RGBA channels is repurposed:

o Red data is a signed 16-bit X displacement.
o Green data is an unsigned 16-bit fractional X displacement.
o Blue data is a signed 16-bit Y displacement.
o Alpha data is a unsigned 16-bit fractional Y displacement.

The warp layer's job is to move pixel data underneath it XY
displacement relative to the pixel the layer is over. So as the
layer's X and Y master offsets are moved, the warp layer lies
over different pixels, and the displacement moves with it.

Keyboard Navigation
, Previous Page . Next Page t TOC i Index o Operators g Glossary

Valid HTML 4.01 Loose
 

This manual was generated with wtfm
wtfm uses aa_macro and SqLite
wtfm and aa_macro are coded in python 2.7
iToolBox 1.57
Please consider supporting my iToolBox development efforts with a small PayPal donation.


Hey, look:
A box!