Image-WebP

 view release on metacpan or  search on metacpan

webp-src/doc/webp-container-spec.txt  view on Meta::CPAN

    ...             |           Frame Height Minus One              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                 Frame Duration                |  Reserved   |D|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         Frame Data                            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Frame X: 24 bits (_uint24_)

: The X coordinate of the upper left corner of the frame is `Frame X * 2`

Frame Y: 24 bits (_uint24_)

: The Y coordinate of the upper left corner of the frame is `Frame Y * 2`

Frame Width Minus One: 24 bits (_uint24_)

: The _1-based_ width of the frame.
  The frame width is `1 + Frame Width Minus One`

Frame Height Minus One: 24 bits (_uint24_)

: The _1-based_ height of the frame.
  The frame height is `1 + Frame Height Minus One`

Frame Duration: 24 bits (_uint24_)

: The time to wait before displaying the next frame, in 1 millisecond units.
In particular, frame duration of 0 is useful when one wants to update multiple
areas of the canvas at once during the animation.

Reserved: 7 bits

: SHOULD be 0.

Disposal method (D): 1 bit

: Indicates how _the current frame_ is to be treated after it has been displayed
(before rendering the next frame) on the canvas:

  * `0`: Do not dispose. Leave the canvas as is.

  * `1`: Dispose to background color. Fill the _rectangle_ on the canvas covered
    by the _current frame_ with background color specified in the
    [ANIM chunk](#anim_chunk).

After disposing the current frame, render the next frame on the canvas using
[alpha-blending](#alpha-blending). If the next frame does not have an alpha
channel, assume alpha value of 255, effectively replacing the rectangle.

**Notes**:

  * The frame disposal only applies to the _frame rectangle_, that is, the
    rectangle defined by _Frame X_, _Frame Y_, _frame width_ and _frame height_.
    It may or may not cover the whole canvas.

{:#alpha-blending}
  * **Alpha-blending**:

    Given that each of the R, G, B and A channels is 8-bit, and the RGB
    channels are _not premultiplied_ by alpha, the formula for blending
    'dst' onto 'src' is:

~~~~~
    blend.A = src.A + dst.A * (1 - src.A / 255)
    if blend.A = 0 then
      blend.RGB = 0
    else
      blend.RGB = (src.RGB * src.A +
                   dst.RGB * dst.A * (1 - src.A / 255)) / blend.A
~~~~~

  * Alpha-blending SHOULD be done in linear color space, by taking into account
    the [color profile](#color-profile) of the image. If the color profile is
    not present, sRGB is to be assumed. (Note that sRGB also needs to be
    linearized due to a gamma of ~2.2).

Frame Data: _Chunk Size_ - `16` bytes

: For a fragmented frame, it consists of multiple [fragment chunks](#fragments).

: For a non-fragmented frame, it consists of:

  * An optional [alpha subchunk](#alpha) for the frame.

  * A [bitstream subchunk](#bitstream-vp8vp8l) for the frame.

  * An optional list of [unknown chunks](#unknown-chunks).

**Note**: The 'ANMF' payload, _Frame Data_ above, consists of individual
_padded_ chunks as described by the [RIFF file format](#riff-file-format).

#### Fragments _\[status: experimental\]_

For images that are represented by fragments, this chunk contains data for
a single fragment. If the _Image Fragmentation Flag_ is not set, then this chunk
SHOULD NOT be present.

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                      ChunkHeader('FRGM')                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                  Fragment X                   |             ...
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    ...       Fragment Y            |         Fragment Data         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Fragment X: 24 bits (_uint24_)

: The X coordinate of the upper left corner of the fragment is `Fragment X * 2`

Fragment Y: 24 bits (_uint24_)

: The Y coordinate of the upper left corner of the fragment is `Fragment Y * 2`

Fragment Data: _Chunk Size_ - `6` bytes

: It contains:

  * An optional [alpha subchunk](#alpha) for the fragment.



( run in 2.574 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )