\section{\module{jpeg} ---
         Read and write JPEG files}

\declaremodule{builtin}{jpeg}
  \platform{IRIX}
\modulesynopsis{Read and write image files in compressed JPEG format.}


The module \module{jpeg} provides access to the jpeg compressor and
decompressor written by the Independent JPEG Group
\index{Independent JPEG Group}(IJG). JPEG is a standard for
compressing pictures; it is defined in ISO 10918.  For details on JPEG
or the Independent JPEG Group software refer to the JPEG standard or
the documentation provided with the software.

A portable interface to JPEG image files is available with the Python
Imaging Library (PIL) by Fredrik Lundh.  Information on PIL is
available at \url{http://www.pythonware.com/products/pil/}.
\index{Python Imaging Library}
\index{PIL (the Python Imaging Library)}
\index{Lundh, Fredrik}

The \module{jpeg} module defines an exception and some functions.

\begin{excdesc}{error}
Exception raised by \function{compress()} and \function{decompress()}
in case of errors.
\end{excdesc}

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

\begin{funcdesc}{decompress}{data}
Data is a string containing a picture in JFIF\index{JFIF} format. It
returns a tuple \code{(\var{data}, \var{width}, \var{height},
\var{bytesperpixel})}.  Again, the data is suitable to pass to
\function{gl.lrectwrite()}.
\end{funcdesc}

\begin{funcdesc}{setoption}{name, value}
Set various options.  Subsequent \function{compress()} and
\function{decompress()} calls will use these options.  The following
options are available:

\begin{tableii}{l|p{3in}}{code}{Option}{Effect}
  \lineii{'forcegray'}{%
    Force output to be grayscale, even if input is RGB.}
  \lineii{'quality'}{%
    Set the quality of the compressed image to a value between
    \code{0} and \code{100} (default is \code{75}).  This only affects
    compression.}
  \lineii{'optimize'}{%
    Perform Huffman table optimization.  Takes longer, but results in
    smaller compressed image.  This only affects compression.}
  \lineii{'smooth'}{%
    Perform inter-block smoothing on uncompressed image.  Only useful
    for low-quality images.  This only affects decompression.}
\end{tableii}
\end{funcdesc}


\begin{seealso}
  \seetitle{JPEG Still Image Data Compression Standard}{The 
            canonical reference for the JPEG image format, by
            Pennebaker and Mitchell.}

  \seetitle[http://www.w3.org/Graphics/JPEG/itu-t81.pdf]{Information
            Technology - Digital Compression and Coding of
            Continuous-tone Still Images - Requirements and
            Guidelines}{The ISO standard for JPEG is also published as
            ITU T.81.  This is available online in PDF form.}
\end{seealso}
