\section{\module{imghdr} ---
         Determine the type of an image}

\declaremodule{standard}{imghdr}
\modulesynopsis{Determine the type of image contained in a file or
                byte stream.}


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 JFIF or Exif formats}
  \lineii{'bmp'}{BMP files}
  \lineii{'png'}{Portable Network Graphics}
\end{tableii}

\versionadded[Exif detection]{2.5}

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}
