\section{Standard Module \module{imghdr}}
\label{module-imghdr}
\stmodindex{imghdr}

The \module{imghdr} module determines the type of image contained in a
file or byte stream.

The \module{imghdr} module defines the following function:


\begin{funcdesc}{what}{filename\optional{, h}}
Tests the image data contained in the file named by \var{filename},
and returns a string describing the image type.  If optional \var{h}
is provided, the \var{filename} is ignored and \var{h} is assumed to
contain the byte stream to test.
\end{funcdesc}

The following image types are recognized, as listed below with the
return value from \function{what()}:

\begin{tableii}{l|l}{code}{Value}{Image format}
  \lineii{'rgb'}{SGI ImgLib Files}
  \lineii{'gif'}{GIF 87a and 89a Files}
  \lineii{'pbm'}{Portable Bitmap Files}
  \lineii{'pgm'}{Portable Graymap Files}
  \lineii{'ppm'}{Portable Pixmap Files}
  \lineii{'tiff'}{TIFF Files}
  \lineii{'rast'}{Sun Raster Files}
  \lineii{'xbm'}{X Bitmap Files}
  \lineii{'jpeg'}{JPEG data in JIFF format}
\end{tableii}

You can extend the list of file types \module{imghdr} can recognize by
appending to this variable:

\begin{datadesc}{tests}
A list of functions performing the individual tests.  Each function
takes two arguments: the byte-stream and an open file-like object.
When \function{what()} is called with a byte-stream, the file-like
object will be \code{None}.

The test function should return a string describing the image type if
the test succeeded, or \code{None} if it failed.
\end{datadesc}

Example:

\begin{verbatim}
>>> import imghdr
>>> imghdr.what('/tmp/bass.gif')
'gif'
\end{verbatim}
