# 13.4 Built-in Module `jpeg`

The module `jpeg` provides access to the jpeg compressor and decompressor written by the Independent JPEG Group. JPEG is a (draft?)\ standard for compressing pictures. For details on jpeg or the Independent JPEG Group software refer to the JPEG standard or the documentation provided with the software.

The `jpeg` module defines these functions:

`compress` (data, w, h, b)
  Treat data as a pixmap of width w and height h, with b bytes per pixel. The data is in SGI GL order, so the first pixel is in the lower-left corner. This means that `lrectread` return data can immediately be passed to compress. Currently only 1 byte and 4 byte pixels are allowed, the former being treated as greyscale and the latter as RGB color. Compress returns a string that contains the compressed picture, in JFIF format.

`decompress` (data)
  Data is a string containing a picture in JFIF format. It returns a tuple `(data, width, height, bytesperpixel)`. Again, the data is suitable to pass to `lrectwrite`.

`setoption` (name, value)
  Set various options. Subsequent compress and decompress calls will use these options. The following options are available:
  `'forcegray'`
    Force output to be grayscale, even if input is RGB.

  `'quality'`
    Set the quality of the compressed image to a value between `0` and `100` (default is `75`). Compress only.

  `'optimize'`
    Perform Huffman table optimization. Takes longer, but results in smaller compressed image. Compress only.

  `'smooth'`
    Perform inter-block smoothing on uncompressed image. Only useful for low-quality images. Decompress only.

Compress and uncompress raise the error `jpeg.error` in case of errors.