\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}% . 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 \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}