# Ouput

A `mandatory` operation when requesting an image.

This provides the format of the generated image along with additional (optional) transformations.

## Format

This mandatory and dictates which optional output operations can be applied.

The `format` property should be one of `jpeg`, `webp`, `tiff`, `avif` or `png`.

### jpeg

| Key               |  Type   | Optional | Default |
| ----------------- | :-----: | :------: | :-----: |
| progressive       | Boolean |    ✓     |   n/a   |
| compressionLevel  | Integer |    ✓     |   n/a   |
| adaptiveFiltering | Boolean |    ✓     |   n/a   |
| palette           | Boolean |    ✓     |   n/a   |
| quality           | Integer |    ✓     |   n/a   |
| colours           | Integer |    ✓     |   n/a   |
| colors            | Integer |    ✓     |   n/a   |
| dither            |  Float  |    ✓     |   n/a   |
| force             | Boolean |    ✓     |   n/a   |

#### `progressive`

Use progressive (interlace) scan.

#### `compressionLevel`

Zlib compression level, 0 (fastest, largest) to 9 (slowest, smallest) (optional, default 6)

#### `adaptiveFiltering`

Use adaptive row filtering (optional, default false)

#### `palette`

Quantise to a palette-based image with alpha transparency support (optional, default false)

#### `quality`

Use the lowest number of colours needed to achieve given quality, sets palette to true (optional, default 100)

#### `colours`

Maximum number of palette entries, sets palette to true (optional, default 256)

#### `colors`

Alternative spelling of options.colours, sets palette to true (optional, default 256)

#### `dither`

Level of Floyd-Steinberg error diffusion, sets palette to true (optional, default 1.0)

#### `force`

Force PNG output, otherwise attempt to use input format (optional, default true)

### webp

| Key             |  Type   | Optional | Min Value | Max Value | Default |
| --------------- | :-----: | :------: | :-------: | :-------: | :-----: |
| quality         | Boolean |    ✓     |     1     |    100    |   80    |
| alphaQuality    | Integer |    ✓     |     0     |    100    |   100   |
| lossless        | Boolean |    ✓     |    n/a    |    n/a    |   n/a   |
| nearLossless    | Boolean |    ✓     |    n/a    |    n/a    |   n/a   |
| smartSubsample  | Boolean |    ✓     |    n/a    |    n/a    |   n/a   |
| reductionEffort | Integer |    ✓     |     0     |     6     |    4    |
| pageHeight      | Integer |    ✓     |    n/a    |    n/a    |   n/a   |
| force           | Boolean |    ✓     |    n/a    |    n/a    |   n/a   |

#### `quality`

quality, integer 1-100 (optional, default 80)

#### `alphaQuality`

quality of alpha layer, integer 0-100 (optional, default 100)

#### `lossless`

Use lossless compression mode (optional, default false)

#### `nearLossless`

Use near_lossless compression mode (optional, default false)

#### `smartSubsample`

Use high quality chroma subsampling (optional, default false)

#### `reductionEffort`

Level of CPU effort to reduce file size, integer 0-6 (optional, default 4)

#### `pageHeight`

Page height for animated output

#### `force`

Force WebP output, otherwise attempt to use input format (optional, default true)

### tiff

| Key         |                             Type                             | Optional | Min Value | Max Value |   Default    |
| ----------- | :----------------------------------------------------------: | :------: | :-------: | :-------: | :----------: |
| quality     |                           Integer                            |    ✓     |     1     |    100    |      80      |
| force       |                           Boolean                            |    ✓     |    n/a    |    n/a    |     n/a      |
| compression | Enum([Compression](/image-processing-api/types/compression)) |    ✓     |    n/a    |    n/a    |    'jpeg'    |
| predictor   |   Enum([Predictor](/image-processing-api/types/Predictor))   |    ✓     |    n/a    |    n/a    | 'horizontal' |
| pyramid     |                           Boolean                            |    ✓     |    n/a    |    n/a    |     n/a      |
| tile        |                           Boolean                            |    ✓     |    n/a    |    n/a    |     n/a      |
| tileWidth   |                           Integer                            |    ✓     |    n/a    |    n/a    |     n/a      |
| tileHeight  |                           Integer                            |    ✓     |    n/a    |    n/a    |     n/a      |
| xres        |                           Integer                            |    ✓     |    n/a    |    n/a    |     n/a      |
| yres        |                           Integer                            |    ✓     |    n/a    |    n/a    |     n/a      |
| bitdepth    |                           Integer                            |    ✓     |    n/a    |    n/a    |     n/a      |

#### `quality`

quality, integer 1-100 (optional, default 80)

#### `force`

Force TIFF output, otherwise attempt to use input format (optional, default true)

#### `compression`

Compression options: lzw, deflate, jpeg, ccittfax4 (optional, default 'jpeg')

#### `predictor`

Compression predictor options: none, horizontal, float (optional, default 'horizontal')

#### `pyramid`

Write an image pyramid (optional, default false)

#### `tile`

Write a tiled tiff (optional, default false)

#### `tileWidth`

horizontal tile size (optional, default 256)

#### `tileHeight`

vertical tile size (optional, default 256)

#### `xres`

horizontal resolution in pixels/mm (optional, default 1.0)

#### `yres`

vertical resolution in pixels/mm (optional, default 1.0)

#### `bitdepth`

reduce bitdepth to 1, 2 or 4 bit (optional, default 8)

### avif

| Key               |  Type   | Optional | Min Value | Max Value | Default |
| ----------------- | :-----: | :------: | :-------: | :-------: | :-----: |
| quality           | Integer |    ✓     |     1     |    100    |   80    |
| lossless          | Boolean |    ✓     |    n/a    |    n/a    |  false  |
| speed             | Integer |    ✓     |     0     |     8     |    5    |
| chromaSubsampling | String  |    ✓     |    n/a    |    n/a    |   n/a   |

#### `quality`

quality, integer 1-100 (optional, default 80)

#### `lossless`

Use lossless compression (optional, default false)

#### `speed`

CPU effort vs file size, 0 (slowest/smallest) to 8 (fastest/largest) (optional, default 5)

#### `chromaSubsampling`

Set to '4:4:4' to prevent chroma subsampling otherwise

### png

| Key               |  Type   | Optional | Min Value | Max Value | Default |
| ----------------- | :-----: | :------: | :-------: | :-------: | :-----: |
| progressive       | Boolean |    ✓     |    n/a    |    n/a    |   n/a   |
| compressionLevel  | Integer |    ✓     |     0     |     9     |    6    |
| adaptiveFiltering | Integer |    ✓     |    n/a    |    n/a    |   n/a   |
| palette           | Boolean |    ✓     |    n/a    |    n/a    |  false  |
| quality           | Integer |    ✓     |    n/a    |    n/a    |   100   |
| colours           | Integer |    ✓     |    n/a    |    n/a    |   256   |
| colors            | Integer |    ✓     |    n/a    |    n/a    |   256   |
| dither            |  Float  |    ✓     |    n/a    |    n/a    |   1.0   |
| force             | Boolean |    ✓     |    n/a    |    n/a    |  true   |

This can be added at the end of the process url as `/output~format:png`.

#### `progressive`

Use progressive (interlace) scan.

#### `compressionLevel`

Zlib compression level, 0 (fastest, largest) to 9 (slowest, smallest) (optional, default 6)

#### `adaptiveFiltering`

Use adaptive row filtering (optional, default false)

#### `palette`

Quantise to a palette-based image with alpha transparency support (optional, default false)

#### `quality`

Use the lowest number of colours needed to achieve given quality, sets palette to true (optional, default 100)

#### `colours`

Maximum number of palette entries, sets palette to true (optional, default 256)

#### `colors`

Alternative spelling of options.colours, sets palette to true (optional, default 256)

#### `dither`

Level of Floyd-Steinberg error diffusion, sets palette to true (optional, default 1.0)

#### `force`

Force PNG output, otherwise attempt to use input format (optional, default true)
