Commits

Fredrik Lundh  committed 770a971

initial code drop (from svn.effbot.org/public/tags/pil-1.1.6/ @523)

  • Participants
  • Tags pil-116

Comments (0)

Files changed (275)

+# $Id: BUILDME 1998 2004-09-10 01:31:07Z fredrik $
+# quick build (for lazy programmers).  for more information on the
+# build process, see the README file.
+
+python setup.py build_ext -i
+python selftest.py
+The Python Imaging Library
+$Id: CHANGES 2934 2006-12-03 12:14:00Z fredrik $
+
+ACKNOWLEDGEMENTS: PIL wouldn't be what it is without the help of,
+among others: David Ascher, Phil Austin, Douglas Bagnall, Larry Bates,
+Anthony Baxter, William Baxter, Denis Benoit, Jan Blom, Duncan Booth,
+Jeff Breidenbach, Roger Burnham, Gene Cash, Kevin Cazabon, Fred Clare,
+Greg Coats, Chris Cogdon, Greg Couch, Bill Crutchfield, Abel Deuring,
+Tim Docker, Fred Drake, Graham Dumpleton, Matthew Ellis, Eric
+Etheridge, Robin Friedrich, Pier Paolo Glave, Federico Di Gregorio,
+Markus Gritsch, Daniel Haertle, Greg Hamilton, Mark Hammond, Bernhard
+Herzog, Rob Hooft, Bob Ippolito, Jack Jansen, Bill Janssen, Edward
+Jones, Richard Jones, H�kan Karlsson, Robert Kern, David Kirtley, Bob
+Klimek, Matthias Klose, Andrew Kuchling, Magnus K�llstr�m, Victor
+Lacina, Ben Last, Hamish Lawson, Cesare Leonardi, Andrew MacIntyre,
+Jan Matejek, Naveen Michaud-Agrawal, Gordon McMillan, Skip Montanaro,
+Fredrik Nehr, Russell Nelson, Luciano Nocera, Travis Oliphant, Piet
+van Oostrum, Richard Oudkerk, Paul Pharr, Andres Polit, Eric Raymond,
+Victor Reijs, Bertil Reinhammar, Nicholas Riley, Don Rozenberg, Toby
+Sargeant, Barry Scott, Les Schaffer, Joel Shprentz, Klamer Shutte,
+Gene Skonicki, Niki Spahiev, D. Alan Stewart, Perry Stoll, Paul
+Svensson, Ulrik Svensson, Miki Tebeka, Ivan Tkatchev, Dan Torop, Adam
+Twardoch, Rune Uhlin, Dmitry Vasiliev, Sasha Voynow, Charles Waldman,
+Dan Wolfe, and Ka-Ping Yee.
+
+*** Changes from release 1.1.5 to 1.1.6 ***
+
+(1.1.6 released)
+
++ Fixed some 64-bit compatibility warnings for Python 2.5.
+
++ Added threading support for the Sane driver (from Abel Deuring).
+
+(1.1.6b2 released)
+
++ Added experimental "floodfill" function to the ImageDraw module
+  (based on code by Eric Raymond).
+
++ The default arguments for "frombuffer" doesn't match "fromstring"
+  and the documentation; this is a bug, and will most likely be fixed
+  in a future version.  In this release, PIL prints a warning message
+  instead.  To silence the warning, change any calls of the form
+  "frombuffer(mode, size, data)" to
+
+      frombuffer(mode, size, data, "raw", mode, 0, 1)
+
++ Added "fromarray" function, which takes an object implementing the
+  NumPy array interface and creates a PIL Image from it. (from Travis
+  Oliphant).
+
++ Added NumPy array interface support (__array_interface__) to the
+  Image class (based on code by Travis Oliphant).
+
+  This allows you to easily convert between PIL image memories and
+  NumPy arrays:
+
+	import numpy, Image
+
+	im = Image.open('lena.jpg')
+
+	a = numpy.asarray(im) # a is readonly
+
+	im = Image.fromarray(a)
+
++ Fixed CMYK polarity for JPEG images, by treating all images as
+  "Adobe CMYK" images. (thanks to Cesare Leonardi and Kevin Cazabon
+  for samples, debugging, and patches).
+
+(1.1.6b1 released)
+
++ Added 'expand' option to the Image 'rotate' method.  If true, the
+  output image is made large enough to hold the entire rotated image.
+
++ Changed the ImageDraw 'line' method to always draw the last pixel in
+  a polyline, independent of line angle.
+
++ Fixed bearing calculation and clipping in the ImageFont truetype
+  renderer; this could lead to clipped text, or crashes in the low-
+  level _imagingft module.  (based on input from Adam Twardoch and
+  others).
+
++ Added ImageQt wrapper module, for converting PIL Image objects to
+  QImage objects in an efficient way.
+
++ Fixed 'getmodebands' to return the number of bands also for "PA"
+  and "LA" modes.  Added 'getmodebandnames' helper that return the
+  band names.
+
+(1.1.6a2 released)
+
++ Added float/double support to the TIFF loader (from Russell
+  Nelson).
+
++ Fixed broken use of realloc() in path.c (from Jan Matejek)
+
++ Added save support for Spider images (from William Baxter).
+
++ Fixed broken 'paste' and 'resize' operations in pildriver
+  (from Bill Janssen).
+
++ Added support for duplex scanning to the Sane interface (Abel
+  Deuring).
+
+(1.1.6a1 released)
+
++ Fixed a memory leak in "convert(mode)", when converting from
+  L to P.
+
++ Added pixel access object.  The "load" method now returns a
+  access object that can be used to directly get and set pixel
+  values, using ordinary [x, y] notation:
+
+	pixel = im.load()
+	v = pixel[x, y]	
+	pixel[x, y] = v	
+
+  If you're accessing more than a few pixels, this is a lot
+  faster than using getpixel/putpixel.
+
++ Fixed building on Cygwin (from Miki Tebeka).
+
++ Fixed "point(callable)" on unloaded images (reported by H�kan
+  Karlsson).
+
++ Fixed size bug in ImageWin.ImageWindow constructor (from Victor
+  Reijs)
+
++ Fixed ImageMath float() and int() operations for Python 2.4
+  (reported by Don Rozenberg).
+
++ Fixed "RuntimeError: encoder error -8 in tostring" problem for
+  wide "RGB", "I", and "F" images.
+
++ Fixed line width calculation.
+
+(1.1.6a0 released)
+
++ Fixed byte order issue in Image.paste(ink) (from Ka-Ping Yee).
+
++ Fixed off-by-0.5 errors in the ANTIALIAS code (based on input
+  from Douglas Bagnall).
+
++ Added buffer interface support to the Path constructor.  If
+  a buffer is provided, it is assumed to contain a flat array
+  of float coordinates (e.g. array.array('f', seq)).
+
++ Added new ImageMath module.
+
++ Fixed ImageOps.equalize when used with a small number of distinct
+  values (reported by David Kirtley).
+
++ Fixed potential integer division in PSDraw.image (from Eric Etheridge).
+
+*** Changes from release 1.1 to 1.1.5 ***
+
+(1.1.5c2 and 1.1.5 final released)
+
++ Added experimental PERSPECTIVE transform method (from Jeff Breiden-
+  bach).
+
+(1.1.5c1 released)
+
++ Make sure "thumbnail" never generates zero-wide or zero-high images
+  (reported by Gene Skonicki)
+
++ Fixed a "getcolors" bug that could result in a zero count for some
+  colors (reported by Richard Oudkerk).
+
++ Changed default "convert" palette to avoid "rounding errors" when
+  round-tripping white source pixels (reported by Henryk Gerlach and
+  Jeff Epler).
+
+(1.1.5b3 released)
+
++ Don't crash in "quantize" method if the number of colors requested
+  is larger than 256.  This release raises a ValueError exception;
+  future versions may return a mode "RGB" image instead (reported
+  by Richard Oudkerk).
+
++ Added WBMP read/write support (based on code by Duncan Booth).
+
+(1.1.5b2 released)
+
++ Added DPI read/write support to the PNG codec.  The decoder sets
+  the info["dpi"] attribute for PNG files with appropriate resolution
+  settings.  The encoder uses the "dpi" option (based on code by Niki
+  Spahiev).
+
++ Added limited support for "point" mappings from mode "I" to mode "L".
+  Only 16-bit values are supported (other values are clipped), the lookup
+  table must contain exactly 65536 entries, and the mode argument must be
+  set to "L".
+
++ Added support for Mac OS X icns files (based on code by Bob Ippolito).
+
++ Added "ModeFilter" support to the ImageFilter module.
+
++ Added support for Spider images (from William Baxter).  See the
+  comments in PIL/SpiderImagePlugin.py for more information on this
+  format.
+
+(1.1.5b1 released)
+
++ Added new Sane release (from Ralph Heinkel).  See the Sane/README
+  and Sane/CHANGES files for more information.
+
++ Added experimental PngInfo chunk container to the PngImageFile
+  module.  This can be used to add arbitrary chunks to a PNG file.
+  Create a PngInfo instance, use "add" or "add_text" to add chunks,
+  and pass the instance as the "pnginfo" option when saving the
+  file.
+
++ Added "getpalette" method.  This returns the palette as a list,
+  or None if the image has no palette.  To modify the palette, use
+  "getpalette" to fetch the current palette, modify the list, and
+  put it back using "putpalette".
+
++ Added optional flattening to the ImagePath "tolist" method.
+  tolist() or tolist(0) returns a list of 2-tuples, as before.
+  tolist(1) returns a flattened list instead.
+
+(1.1.5a5 released)
+
++ Fixed BILINEAR/BICUBIC/ANTIALIAS filtering for mode "LA".
+
++ Added "getcolors()" method.  This is similar to the existing histo-
+  gram method, but looks at color values instead of individual layers,
+  and returns an unsorted list of (count, color) tuples.
+
+  By default, the method returns None if finds more than 256 colors.
+  If you need to look for more colors, you can pass in a limit (this
+  is used to allocate internal tables, so you probably don't want to
+  pass in too large values).
+
++ Build improvements: Fixed building under AIX, improved detection of
+  FreeType2 and Mac OS X framework libraries, and more.  Many thanks
+  to everyone who helped test the new "setup.py" script!
+
+(1.1.5a4 released)
+
++ The "save" method now looks for a file format driver before
+  creating the file.
+
++ Don't use antialiased truetype fonts when drawing in mode "P", "I",
+  and "F" images.
+
++ Rewrote the "setup.py" file.  The new version scans for available
+  support libraries, and configures both the libImaging core library
+  and the bindings in one step.
+
+  To use specific versions of the libraries, edit the ROOT variables
+  in the setup.py file.
+
++ Removed threaded "show" viewer; use the old "show" implementation
+  instead (Windows).
+
++ Added deprecation warnings to Image.offset, ImageDraw.setink, and
+  ImageDraw.setfill.
+
++ Added width option to ImageDraw.line().  The current implementation
+  works best for straight lines; it does not support line joins, so
+  polylines won't look good.
+
++ ImageDraw.Draw is now a factory function instead of a class.  If
+  you need to create custom draw classes, inherit from the ImageDraw
+  class.    All other code should use the factory function.
+
++ Fixed loading of certain PCX files (problem reported by Greg
+  Hamilton, who also provided samples).
+
++ Changed _imagingft.c to require FreeType 2.1 or newer.  The
+  module can still be built with earlier versions; see comments
+  in _imagingft.c for details.
+
+(1.1.5a3 released)
+
++ Added 'getim' method, which returns a PyCObject wrapping an
+  Imaging pointer.  The description string is set to IMAGING_MAGIC.
+  See Imaging.h for pointer and string declarations.
+
++ Fixed reading of TIFF JPEG images (problem reported by Ulrik
+  Svensson).
+
++ Made ImageColor work under Python 1.5.2
+
++ Fixed division by zero "equalize" on very small images (from
+  Douglas Bagnall).
+
+(1.1.5a2 released)
+
++ The "paste" method now supports the alternative "paste(im, mask)"
+  syntax (in this case, the box defaults to im's bounding box).
+
++ The "ImageFile.Parser" class now works also for PNG files with
+  more than one IDAT block.
+
++ Added DPI read/write to the TIFF codec, and fixed writing of
+  rational values.  The decoder sets the info["dpi"] attribute
+  for TIFF files with appropriate resolution settings.  The
+  encoder uses the "dpi" option.
+
++ Disable interlacing for small (or narrow) GIF images, to
+  work around what appears to be a hard-to-find bug in PIL's
+  GIF encoder.
+
++ Fixed writing of mode "P" PDF images.  Made mode "1" PDF
+  images smaller.
+
++ Made the XBM reader a bit more robust; the file may now start
+  with a few whitespace characters.
+
++ Added support for enhanced metafiles to the WMF driver.  The
+  separate PILWMF kit lets you render both placeable WMF files
+  and EMF files as raster images.  See
+
+      http://effbot.org/downloads#pilwmf
+
+(1.1.5a1 released)
+
++ Replaced broken WMF driver with a WMF stub plugin (see below).
+
++ Fixed writing of mode "1", "L", and "CMYK" PDF images (based on
+  input from Nicholas Riley and others).
+
++ Fixed adaptive palette conversion for zero-width or zero-height
+  images (from Chris Cogdon)
+
++ Fixed reading of PNG images from QuickTime 6 (from Paul Pharr)
+
++ Added support for StubImageFile plugins, including stub plugins
+  for BUFR, FITS, GRIB, and HDF5 files.  A stub plugin can identify
+  a given file format, but relies on application code to open and
+  save files in that format.
+
++ Added optional "encoding" argument to the ImageFont.truetype
+  factory.  This argument can be used to specify non-Unicode character
+  maps for fonts that support that.  For example, to draw text using
+  the Microsoft Symbol font, use:
+
+      font = ImageFont.truetype("symbol.ttf", 16, encoding="symb")
+      draw.text((0, 0), unichr(0xF000 + 0xAA))
+
+  (note that the symbol font uses characters in the 0xF000-0xF0FF
+   range)
+
+  Common encodings are "unic" (Unicode), "symb" (Microsoft Symbol),
+  "ADOB" (Adobe Standard), "ADBE" (Adobe Expert), and "armn" (Apple
+  Roman).  See the FreeType documentation for more information.
+
++ Made "putalpha" a bit more robust; you can now attach an alpha
+  layer to a plain "L" or "RGB" image, and you can also specify
+  constant alphas instead of alpha layers (using integers or colour
+  names).
+
++ Added experimental "LA" mode support.
+
+  An "LA" image is an "L" image with an attached transparency layer.
+  Note that support for "LA" is not complete; some operations may
+  fail or produce unexpected results.
+
++ Added "RankFilter", "MinFilter", "MedianFilter", and "MaxFilter"
+  classes to the ImageFilter module.
+
++ Improved support for applications using multiple threads; PIL
+  now releases the global interpreter lock for many CPU-intensive
+  operations (based on work by Kevin Cazabon).
+
++ Ignore Unicode characters in the PCF loader (from Andres Polit)
+
++ Fixed typo in OleFileIO.loadfat, which could affect loading of
+  FlashPix and Image Composer images (Daniel Haertle)
+
++ Fixed building on platforms that have Freetype but don't have
+  Tcl/Tk (Jack Jansen, Luciano Nocera, Piet van Oostrum and others)
+
++ Added EXIF GPSInfo read support for JPEG files.  To extract
+  GPSInfo information, open the file, extract the exif dictionary,
+  and check for the key 0x8825 (GPSInfo).  If present, it contains
+  a dictionary mapping GPS keys to GPS values.  For a list of keys,
+  see the EXIF specification.
+
+  The "ExifTags" module contains a GPSTAGS dictionary mapping GPS
+  tags to tag names.
+
++ Added DPI read support to the PCX and DCX codecs (info["dpi"]).
+
++ The "show" methods now uses a built-in image viewer on Windows.
+  This viewer creates an instance of the ImageWindow class (see
+  below) and keeps it running in a separate thread.  NOTE: This
+  was disabled in 1.1.5a4.
+
++ Added experimental "Window" and "ImageWindow" classes to the
+  ImageWin module.  These classes allow you to create a WCK-style
+  toplevel window, and use it to display raster data.
+
++ Fixed some Python 1.5.2 issues (to build under 1.5.2, use the
+  Makefile.pre.in/Setup.in approach)
+
++ Added support for the TIFF FillOrder tag.  PIL can read mode "1",
+  "L", "P" and "RGB" images with non-standard FillOrder (based on
+  input from Jeff Breidenbach).
+
+(1.1.4 final released)
+
++ Fixed ImageTk build problem on Unix.
+
+(1.1.4b2 released)
+
++ Improved building on Mac OS X (from Jack Jansen).
+
++ Improved building on Windows with MinGW (from Klamer Shutte).
+
++ If no font is specified, ImageDraw now uses the embedded default
+  font.  Use the "load" or "truetype" methods to load a real font.
+
++ Added embedded default font to the ImageFont module (currently
+  an 8-pixel Courier font, taken from the X window distribution).
+
+(1.1.4b1 released)
+
++ Added experimental EXIF support for JPEG files.  To extract EXIF
+  information from a JPEG file, open the file as usual, and call the
+  "_getexif" method.  If successful, this method returns a dictionary
+  mapping EXIF TIFF tags to values.  If the file does not contain EXIF
+  data, the "_getexif" method returns None.
+
+  The "ExifTags" module contains a dictionary mapping tags to tag
+  names.
+
+  This interface will most likely change in future versions.
+
++ Fixed a bug when using the "transparency" option with the GIF
+  writer.
+
++ Added limited support for "bitfield compression" in BMP files
+  and DIB buffers, for 15-bit, 16-bit, and 32-bit images.  This
+  also fixes a problem with ImageGrab module when copying screen-
+  dumps from the clipboard on 15/16/32-bit displays.
+
++ Added experimental WAL (Quake 2 textures) loader.  To use this
+  loader, import WalImageFile and call the "open" method in that
+  module.
+
+(1.1.4a4 released)
+
++ Added updated SANE driver (Andrew Kuchling, Abel Deuring)
+
++ Use Python's "mmap" module on non-Windows platforms to read some
+  uncompressed formats using memory mapping.  Also added a "frombuffer"
+  function that allows you to access the contents of an existing string
+  or buffer object as if it were an image object.
+
++ Fixed a memory leak that could appear when processing mode "P"
+  images (from Pier Paolo Glave)
+
++ Ignore Unicode characters in the BDF loader (from Graham Dumpleton)
+
+(1.1.4a3 released; windows only)
+
++ Added experimental RGBA-on-RGB drawing support.  To use RGBA
+  colours on an RGB image, pass "RGBA" as the second string to
+  the ImageDraw.Draw constructor.
+
++ Added support for non-ASCII strings (Latin-1) and Unicode
+  to the truetype font renderer.
+
++ The ImageWin "Dib" object can now be constructed directly from
+  an image object.
+
++ The ImageWin module now allows you use window handles as well
+  as device contexts.  To use a window handle, wrap the handle in
+  an ImageWin.HWND object, and pass in this object instead of the
+  device context.
+
+(1.1.4a2 released)
+
++ Improved support for 16-bit unsigned integer images (mode "I;16").
+  This includes TIFF reader support, and support for "getextrema"
+  and "point" (from Klamer Shutte).
+
++ Made the BdfFontFile reader a bit more robust (from Kevin Cazabon
+  and Dmitry Vasiliev)
+
++ Changed TIFF writer to always write Compression tag, even when
+  using the default compression (from Greg Couch).
+
++ Added "show" support for Mac OS X (from Dan Wolfe).
+
++ Added clipboard support to the "ImageGrab" module (Windows only).
+  The "grabclipboard" function returns an Image object, a list of
+  filenames (not in 1.1.4), or None if neither was found.
+
+(1.1.4a1 released)
+
++ Improved support for drawing RGB data in palette images.  You can
+  now use RGB tuples or colour names (see below) when drawing in a
+  mode "P" image.  The drawing layer automatically assigns color
+  indexes, as long as you don't use more than 256 unique colours.
+
++ Moved self test from MiniTest/test.py to ./selftest.py.
+
++ Added support for CSS3-style color strings to most places that
+  accept colour codes/tuples.  This includes the "ImageDraw" module,
+  the Image "new" function, and the Image "paste" method.
+
+  Colour strings can use one of the following formats: "#f00",
+  "#ff0000", "rgb(255,0,0)", "rgb(100%,0%,0%)", "hsl(0, 100%, 50%)",
+  or "red" (most X11-style colour names are supported).  See the
+  documentation for the "ImageColor" module for more information.
+
++ Fixed DCX decoder (based on input from Larry Bates)
+
++ Added "IptcImagePlugin.getiptcinfo" helper to extract IPTC/NAA
+  newsphoto properties from JPEG, TIFF, or IPTC files.
+
++ Support for TrueType/OpenType fonts has been added to
+  the standard distribution.  You need the freetype 2.0
+  library.
+
++ Made the PCX reader a bit more robust when reading 2-bit
+  and 4-bit PCX images with odd image sizes.
+
++ Added "Kernel" class to the ImageFilter module.  This class
+  allows you to filter images with user-defined 3x3 and 5x5
+  convolution kernels.
+
++ Added "putdata" support for mode "I", "F" and "RGB".
+
++ The GIF writer now supports the transparency option (from
+  Denis Benoit).
+
++ A HTML version of the module documentation is now shipped
+  with the source code distribution.  You'll find the files in
+  the Doc subdirectory.
+
++ Added support for Palm pixmaps (from Bill Janssen).  This
+  change was listed for 1.1.3, but the "PalmImagePlugin" driver
+  didn't make it into the distribution.
+
++ Improved decoder error messages.
+
+(1.1.3 final released)
+
++ Made setup.py look for old versions of zlib.  For some back-
+  ground, see: http://www.gzip.org/zlib/advisory-2002-03-11.txt
+
+(1.1.3c2 released)
+
++ Added setup.py file (tested on Unix and Windows).  You still
+  need to build libImaging/imaging.lib in the traditional way,
+  but the setup.py script takes care of the rest.
+
+  The old Setup.in/Makefile.pre.in build method is still
+  supported.
+
++ Fixed segmentation violation in ANTIALIAS filter (an internal
+  buffer wasn't properly allocated).
+
+(1.1.3c1 released)
+
++ Added ANTIALIAS downsampling filter for high-quality "resize"
+  and "thumbnail" operations.  Also added filter option to the
+  "thumbnail" operation; the default value is NEAREST, but this
+  will most likely change in future versions.
+
++ Fixed plugin loader to be more robust if the __file__
+  variable isn't set.
+
++ Added seek/tell support (for layers) to the PhotoShop
+  loader.  Layer 0 is the main image.
+
++ Added new (but experimental) "ImageOps" module, which provides
+  shortcuts for commonly used operations on entire images.
+
++ Don't mess up when loading PNG images if the decoder leaves
+  data in the output buffer.  This could cause internal errors
+  on some PNG images, with some versions of ZLIB. (Bug report
+  and patch provided by Bernhard Herzog.)
+
++ Don't mess up on Unicode filenames.
+
++ Don't mess up when drawing on big endian platforms.
+
++ Made the TIFF loader a bit more robust; it can now read some
+  more slightly broken TIFF files (based on input from Ted Wright,
+  Bob Klimek, and D. Alan Stewart)
+
++ Added OS/2 EMX build files (from Andrew MacIntyre)
+
++ Change "ImageFont" to reject image files if they don't have the
+  right mode.  Older versions could leak memory for "P" images.
+  (Bug reported by Markus Gritsch).
+  
++ Renamed some internal functions to avoid potential build
+  problem on Mac OS X.
+
++ Added DL_EXPORT where relevant (for Cygwin, based on input
+  from Robert Yodlowski)
+
++ (re)moved bogus __init__ call in BdfFontFile (bug spotted
+  by Fred Clare)
+
++ Added "ImageGrab" support (Windows only)
+
++ Added support for XBM hotspots (based on code contributed by
+  Bernhard Herzog).
+
++ Added write support for more TIFF tags, namely the Artist,
+  Copyright, DateTime, ResolutionUnit, Software, XResolution and
+  YResolution tags (from Greg Couch)
+
++ Added TransposedFont wrapper to ImageFont module
+
++ Added "optimize" flag to GIF encoder.  If optimize is present
+  and non-zero, PIL will work harder to create a small file.
+
++ Raise "EOFError" (not IndexError) when reading beyond the
+  end of a TIFF sequence.
+
++ Support rewind ("seek(0)") for GIF and TIFF sequences.
+
++ Load grayscale GIF images as mode "L"
+
++ Added DPI read/write support to the JPEG codec.  The decoder
+  sets the info["dpi"] attribute for JPEG files with JFIF dpi
+  settings.  The encoder uses the "dpi" option:
+
+      im = Image.open("file.jpg")
+      dpi = im.info["dpi"] # raises KeyError if DPI not known
+      im.save("out.jpg", dpi=dpi)
+
+  Note that PIL doesn't always preserve the "info" attribute
+  for normal image operations.
+
+(1.1.2c1 and 1.1.2 final released)
+
++ Adapted to Python 2.1.  Among other things, all uses of the
+  "regex" module has been repleased with "re".
+
++ Fixed attribute error when reading large PNG files (this bug
+  was introduced in maintenance code released after the 1.1.1
+  release)
+
++ Ignore non-string objects in sys.path
+
++ Fixed Image.transform(EXTENT) for negative xoffsets
+
++ Fixed loading of image plugins if PIL is installed as a package.
+  (The plugin loader now always looks in the directory where the
+  Image.py module itself is found, even if that directory isn't on
+  the standard search path)
+
++ The Png plugin has been added to the list of preloaded standard
+  formats
+
++ Fixed bitmap/text drawing in fill mode.
+
++ Fixed "getextrema" to work also for multiband images.
+
++ Added transparency support for L and P images to the PNG codec.
+
++ Improved support for read-only images.  The "load" method now
+  sets the "readonly" attribute for memory-mapped images.  Operations
+  that modifies an image in place (such as "paste" and drawing operations)
+  creates an in-memory copy of the image, if necessary.  (before this
+  change, any attempt to modify a memory-mapped image resulted in a
+  core dump...)
+
++ Added special cases for lists everywhere PIL expects a sequence.
+  This should speed up things like "putdata" and drawing operations.
+
++ The Image.offset method is deprecated.  Use the ImageChops.offset
+  function instead. 
+
++ Changed ImageChops operators to copy palette and info dictionary
+  from the first image argument.
+
+(1.1.1 released)
+
++ Additional fixes for Python 1.6/2.0, including TIFF "save" bug. 
+
++ Changed "init" to properly load plugins when PIL is used as a
+  package.
+
++ Fixed broken "show" method (on Unix)
+
+*** Changes from release 1.0 to 1.1 ***
+
++ Adapted to Python 1.6 ("append" and other method changes)
+
++ Fixed Image.paste when pasting with solid colour and matte
+  layers ("L" or "RGBA" masks) (bug reported by Robert Kern)
+
++ To make it easier to distribute prebuilt versions of PIL,
+  the tkinit binding stuff has been moved to a separate
+  extension module, named "_imagingtk".
+
+*** Changes from release 0.3b2 to 1.0 final ***
+
++ If there's no 16-bit integer (like on a Cray T3E), set
+  INT16 to the smallest integer available.  Most of the
+  library works just fine anyway (from Bill Crutchfield)
+
++ Tweaks to make drawing work on big-endian platforms.
+
+(1.0c2 released)
+
++ If PIL is built with the WITH_TKINTER flag, ImageTk can
+  automatically hook into a standard Tkinter build.  You
+  no longer need to build your own Tkinter to use the
+  ImageTk module.
+
+  The old way still works, though.  For more information,
+  see Tk/install.txt.
+
++ Some tweaks to ImageTk to support multiple Tk interpreters
+  (from Greg Couch).
+
++ ImageFont "load_path" now scans directory mentioned in .pth
+  files (from Richard Jones).
+
+(1.0c1 released)
+
++ The TIFF plugin has been rewritten.  The new plugin fully
+  supports all major PIL image modes (including F and I).
+
++ The ImageFile module now includes a Parser class, which can
+  be used to incrementally decode an image file (while down-
+  loading it from the net, for example).  See the handbook for
+  details.
+
++ "show" now converts non-standard modes to "L" or "RGB" (as
+  appropriate), rather than writing weird things to disk for
+  "xv" to choke upon. (bug reported by Les Schaffer).
+
+(1.0b2 released)
+
++ Major speedups for rotate, transform(EXTENT), and transform(AFFINE)
+  when using nearest neighbour resampling.
+
++ Modified ImageDraw to be compatible with the Arrow graphics
+  interface.  See the handbook for details.
+
++ PIL now automatically loads file codecs when used as a package
+  (from The Dragon De Monsyne).  Also included an __init__.py file
+  in the standard distribution.
+
++ The GIF encoder has been modified to produce much smaller files.
+
+  PIL now uses a run-length encoding method to encode GIF files.
+  On a random selection of GIF images grabbed from the web, this
+  version makes the images about twice as large as the original
+  LZW files, where the earlier version made them over 5 times
+  larger.  YMMV, of course.
+
++ Added PCX write support (works with "1", "P", "L", and "RGB")
+
++ Added "bitmap" and "textsize" methods to ImageDraw.
+
++ Improved font rendering code.  Fixed a bug or two, and moved
+  most of the time critical stuff to C.
+
++ Removed "bdf2pil.py".  Use "pilfont.py" instead!
+
++ Improved 16-bit support (still experimental, though).
+
+  The following methods now support "I;16" and "I;16B" images:
+  "getpixel", "copy", "convert" (to and from mode "I"), "resize",
+  "rotate", and "transform" with nearest neighbour filters, and
+  "save" using the IM format.  The "new" and "open" functions
+  also work as expected.  On Windows, 16-bit files are memory
+  mapped.
+
+  NOTE: ALL other operations are still UNDEFINED on 16-bit images.
+
++ The "paste" method now supports constant sources.
+
+  Just pass a colour value (a number or a tuple, depending on
+  the target image mode) instead of the source image.
+
+  This was in fact implemented in an inefficient way in
+  earlier versions (the "paste" method generated a temporary
+  source image if you passed it a colour instead of an image).
+  In this version, this is handled on the C level instead.
+
++ Added experimental "RGBa" mode support.
+
+  An "RGBa" image is an RGBA image where the colour components
+  have have been premultipled with the alpha value.  PIL allows
+  you to convert an RGBA image to an RGBa image, and to paste
+  RGBa images on top of RGB images.  Since this saves a bunch
+  of multiplications and shifts, it is typically about twice
+  as fast an ordinary RGBA paste.
+
++ Eliminated extra conversion step when pasting "RGBA" or "RGBa"
+  images on top of "RGB" images.
+
++ Fixed Image.BICUBIC resampling for "RGB" images.
+
++ Fixed PCX image file handler to properly read 8-bit PCX
+  files (bug introduced in 1.0b1, reported by Bernhard
+  Herzog)
+
++ Fixed PSDraw "image" method to restore the coordinate
+  system.
+
++ Fixed "blend" problem when applied to images that was
+  not already loaded (reported by Edward C. Jones)
+
++ Fixed -f option to "pilconvert.py" (from Anthony Baxter)
+
+(1.0b1 released)
+
++ Added Toby J. Sargeant's quantization package.  To enable
+  quantization, use the "palette" option to "convert":
+
+	imOut = im.convert("P", palette=Image.ADAPTIVE)
+
+  This can be used with "L", "P", and "RGB" images.  In this
+  version, dithering cannot be used with adaptive palettes.
+
+  Note: ADAPTIVE currently maps to median cut quantization
+  with 256 colours.  The quantization package also contains
+  a maximum coverage quantizer, which will be supported by
+  future versions of PIL.
+
++ Added Eric S. Raymond's "pildriver" image calculator to the
+  distribution.  See the docstring for more information.
+
++ The "offset" method no longer dumps core if given positive
+  offsets (from Charles Waldman).
+
++ Fixed a resource leak that could cause ImageWin to run out of
+  GDI resources (from Roger Burnham).
+
++ Added "arc", "chord", and "pieslice" methods to ImageDraw (inspired
+  by code contributed by Richard Jones).
+
++ Added experimental 16-bit support, via modes "I;16" (little endian
+  data) and "I;16B" (big endian).  Only a few methods properly support
+  such images (see above).
+
++ Added XV thumbnail file handler (from Gene Cash).
+
++ Fixed BMP image file handler to handle palette images with small
+  palettes (from Rob Hooft).
+
++ Fixed Sun raster file handler for palette images (from Charles
+  Waldman).
+
++ Improved various internal error messages.
+
++ Fixed Path constructor to handle arbitrary sequence objects.  This
+  also affects the ImageDraw class (from Richard Jones).
+
++ Fixed a bug in JpegDecode that caused PIL to report "decoder error
+  -2" for some progressive JPEG files (reported by Magnus K�llstr�m,
+  who also provided samples).
+
++ Fixed a bug in JpegImagePlugin that caused PIL to hang when loading
+  JPEG files using 16-bit quantization tables.
+
++ The Image "transform" method now supports Image.QUAD transforms.
+  The data argument is an 8-tuple giving the upper left, lower
+  left, lower right, and upper right corner of the source quadri-
+  lateral.  Also added Image.MESH transform which takes a list
+  of quadrilaterals.
+
++ The Image "resize", "rotate", and "transform" methods now support
+  Image.BILINEAR (2x2) and Image.BICUBIC (4x4) resampling filters.
+  Filters can be used with all transform methods.
+
++ The ImageDraw "rectangle" method now includes both the right
+  and the bottom edges when drawing filled rectangles.
+
++ The TGA decoder now works properly for runlength encoded images 
+  which have more than one byte per pixel.
+
++ "getbands" on an YCbCr image now returns ("Y", "Cb", "Cr")
+
++ Some file drivers didn't handle the optional "modify" argument
+  to the load method.  This resulted in exceptions when you used
+  "paste" (and other methods that modify an image in place) on a
+  newly opened file.
+
+*** Changes from release 0.2 (b5) to 0.3 (b2) ***
+
+(0.3b2 released)
+
+The test suite includes 825 individual tests.
+
++ An Image "getbands" method has been added.  It returns a tuple
+  containing the individual band names for this image.  To figure
+  out how many bands an image has, use "len(im.getbands())".
+
++ An Image "putpixel" method has been added.
+
++ The Image "point" method can now be used to convert "L" images
+  to any other format, via a lookup table.  That table should
+  contain 256 values for each band in the output image.
+
++ Some file drivers (including FLI/FLC, GIF, and IM) accidently
+  overwrote the offset method with an internal attribute.  All
+  drivers have been updated to use private attributes where
+  possible.
+
++ The Image "histogram" method now works for "I" and "F" images.
+  For these modes, PIL divides the range between the min and
+  max values used in the image into 256 bins.  You can also
+  pass in your own min and max values via the "extrema" option:
+
+	h = im.histogram(extrema=(0, 255))
+
++ An Image "getextrema" method has been added.  It returns the
+  min and max values used in the image. In this release, this
+  works for single band images only.
+
++ Changed the PNG driver to load and save mode "I" images as
+  16-bit images.  When saving, values outside the range 0..65535
+  are clipped.
+
++ Fixed ImageFont.py to work with the new "pilfont" compiler.
+
++ Added JPEG "save" and "draft" support for mode "YCbCr" images.
+  Note that if you save an "YCbCr" image as a JPEG file and read
+  it back, it is read as an RGB file.  To get around this, you
+  can use the "draft" method:
+
+	im = Image.open("color.jpg")
+	im.draft("YCbCr", im.size)
+
++ Read "RGBA" TGA images.  Also fixed the orientation bug; all
+  images should now come out the right way.
+
++ Changed mode name (and internal representation) from "YCrCb"
+  to "YCbCr" (!)
+  *** WARNING: MAY BREAK EXISTING CODE ***
+
+(0.3b1 released)
+
+The test suite includes 750 individual tests.
+
++ The "pilfont" package is now included in the standard PIL
+  distribution.  The pilfont utility can be used to convert
+  X BDF and PCF raster font files to a format understood by
+  the ImageFont module.
+
++ GIF files are now interlaced by default.  To write a
+  non-interlaced file, pass interlace=0 to the "save"
+  method.
+
++ The default string format has changed for the "fromstring"
+  and "tostring" methods.
+  *** WARNING: MAY BREAK EXISTING CODE ***
+
+  NOTE: If no extra arguments are given, the first line in
+  the string buffer is the top line of the image, instead of
+  the bottom line.  For RGB images, the string now contains
+  3 bytes per pixel instead of 4.  These changes were made
+  to make the methods compatible with the "fromstring"
+  factory function.
+
+  To get the old behaviour, use the following syntax:
+
+	data = im.tostring("raw", "RGBX", 0, -1)
+	im.fromstring(data, "raw", "RGBX", 0, -1)
+
++ "new" no longer gives a MemoryError if the width or height
+  is zero (this only happened on platforms where malloc(0)
+  or calloc(0) returns NULL).
+
++ "new" now adds a default palette object to "P" images.
+
++ You can now convert directly between all modes supported by
+  PIL.  When converting colour images to "P", PIL defaults to
+  a "web" palette and dithering.  When converting greyscale
+  images to "1", PIL uses a thresholding and dithering.
+
++ Added a "dither" option to "convert".  By default, "convert"
+  uses floyd-steinberg error diffusion for "P" and "1" targets,
+  so this option is only used to *disable* dithering. Allowed
+  values are NONE (no dithering) or FLOYDSTEINBERG (default).
+
+	imOut = im.convert("P", dither=Image.NONE)
+
++ Added a full set of "I" decoders.  You can use "fromstring"
+  (and file decoders) to read any standard integer type as an
+  "I" image.
+
++ Added some support for "YCbCr" images (creation, conversion
+  from/to "L" and "RGB", IM YCC load/save)
+
++ "getpixel" now works properly with fractional coordinates.
+
++ ImageDraw "setink" now works with "I", "F", "RGB", "RGBA",
+  "RGBX", "CMYK", and "YCbCr" images.
+
++ ImImagePlugin no longer attaches palettes to "RGB" images.
+
++ Various minor fixes.
+
+(0.3a4 released)
+
++ Added experimental IPTC/NAA support.
+
++ Eliminated AttributeError exceptions after "crop" (from
+  Skip Montanaro)
+
++ Reads some uncompressed formats via memory mapping (this
+  is currently supported on Win32 only)
+
++ Fixed some last minute glitches in the last alpha release
+  (Types instead of types in Image.py, version numbers, etc.)
+
++ Eliminated some more bogus compiler warnings.
+
++ Various fixes to make PIL compile and run smoother on Macs
+  (from Jack Jansen).
+
++ Fixed "fromstring" and "tostring" for mode "I" images.
+
+(0.3a3 released)
+
+The test suite includes 530 individual tests.
+
++ Eliminated unexpected side-effect in "paste" with matte.  "paste"
+  now works properly also if compiled with "gcc".
+
++ Adapted to Python 1.5 (build issues only)
+
++ Fixed the ImageDraw "point" method to draw also the last
+  point (!).
+
++ Added "I" and "RGBX" support to Image.new.
+
++ The plugin path is now properly prepended to the module search
+  path when a plugin module is imported.
+
++ Added "draw" method to the ImageWin.Dib class.  This is used by
+  Topaz to print images on Windows printers.
+
++ "convert" now supports conversions from "P" to "1" and "F".
+
++ "paste" can now take a colour instead of an image as the first argument.
+  The colour must match the colour argument given to the new function, and
+  match the mode of the target image.
+
++ Fixed "paste" to allow a mask also for mode "F" images.
+
++ The BMP driver now saves mode "1" images.  When loading images, the mode
+  is set to "L" for 8-bit files with greyscale palettes, and to "P" for
+  other 8-bit files.
+
++ The IM driver now reads and saves "1" images (file modes "0 1" or "L 1").
+
++ The JPEG and GIF drivers now saves "1" images.  For JPEG, the image
+  is saved as 8-bit greyscale (it will load as mode "L").  For GIF, the
+  image will be loaded as a "P" image.
+
++ Fixed a potential buffer overrun in the GIF encoder.
+
+(0.3a2 released)
+
+The test suite includes 400 individual tests.
+
++ Improvements to the test suite revealed a number of minor bugs, which
+  are all fixed.  Note that crop/paste, 32-bit ImageDraw, and ImageFont
+  are still weak spots in this release.
+
++ Added "putpalette" method to the Image class.  You can use this
+  to add or modify the palette for "P" and "L" images.  If a palette
+  is added to an "L" image, it is automatically converted to a "P"
+  image.
+
++ Fixed ImageDraw to properly handle 32-bit image memories
+  ("RGB", "RGBA", "CMYK", "F")
+
++ Fixed "fromstring" and "tostring" not to mess up the mode attribute
+  in default mode.
+
++ Changed ImPlatform.h to work on CRAY's (don't have one at home, so I
+  haven't tried it).  The previous version assumed that either "short"
+  or "int" were 16-bit wide. PIL still won't compile on platforms where
+  neither "short", "int" nor "long" are 32-bit wide.
+
++ Added file= and data= keyword arguments to PhotoImage and BitmapImage.
+  This allows you to use them as drop-in replacements for the corre-
+  sponding Tkinter classes.
+
++ Removed bogus references to the crack coder (ImagingCrack).
+
+(0.3a1 released)
+
++ Make sure image is loaded in "tostring".
+
++ Added floating point packer (native 32-bit floats only).
+
+*** Changes from release 0.1b1 to 0.2 (b5) ***
+
++ Modified "fromstring" and "tostring" methods to use file codecs.
+  Also added "fromstring" factory method to create an image directly
+  from data in a string.
+
++ Added support for 32-bit floating point images (mode "F").  You
+  can convert between "L" and "F" images, and apply a subset of the
+  available image processing methods on the "F" image.  You can also
+  read virtually any data format into a floating point image memory;
+  see the section on "Decoding Floating Point Data" in the handbook
+  for more information.
+
+(0.2b5 released; on windows only)
+
++ Fixed the tobitmap() method to work properly for small bitmaps.
+
++ Added RMS and standard deviation to the ImageStat.Stat class.  Also
+  modified the constructor to take an optional feature mask, and also
+  to accept either an image or a list containing the histogram data.
+
++ The BitmapImage code in ImageTk can now use a special bitmap
+  decoder, which has to be patched into Tk.  See the "Tk/pilbitmap.txt"
+  file for details.  If not installed, bitmaps are transferred to Tk as
+  XBM strings.
+
++ The PhotoImage code in ImageTk now uses a Tcl command ("PyImagingPaste")
+  instead of a special image type.  This gives somewhat better performance,
+  and also allows PIL to support transparency.
+  *** WARNING: TKAPPINIT MUST BE MODIFIED ***
+
++ ImageTk now honours the alpha layer in RGBA images.  Only fully
+  transparent pixels are made transparent (that is, the alpha layer
+  is treated as a mask).  To treat the alpha laters as a matte, you
+  must paste the image on the background before handing it over to
+  ImageTk.
+
++ Added McIdas reader (supports 8-bit images only).
+
++ PIL now preloads drivers for BMP, GIF, JPEG, PPM, and TIFF.  As
+  long as you only load and save these formats, you don't have to
+  wait for a full scan for drivers.  To force scanning, call the
+  Image.init() function.
+
++ The "seek" and "tell" methods are now always available, also for
+  single-frame images.
+
++ Added optional mask argument to histogram method.  The mask may
+  be an "1" or "L" image with the same size as the original image.
+  Only pixels where the mask is non-zero are included in the
+  histogram.
+
++ The "paste" method now allows you to specify only the lower left
+  corner (a 2-tuple), instead of the full region (a 4-tuple).
+
++ Reverted to old plugin scanning model; now scans all directory
+  names in the path when looking for plugins.
+
++ Added PIXAR raster support.  Only uncompressed ("dumped") RGB
+  images can currently be read (based on information provided
+  by Greg Coats).
+
++ Added FlashPix (FPX) read support.  Reads all pixel formats, but
+  only the highest resolution is read, and the viewing transform is
+  currently ignored.
+
++ Made PNG encoding somewhat more efficient in "optimize" mode; a
+  bug in 0.2b4 didn't enable all predictor filters when optimized
+  storage were requested.
+
++ Added Microsoft Image Composer (MIC) read support.  When opened,
+  the first sprite in the file is loaded.  You can use the seek method
+  to load additional sprites from the file.
+
++ Properly reads "P" and "CMYK" PSD images.
+
++ "pilconvert" no longer optimizes by default; use the -o option to
+  make the file as small as possible (at the expense of speed); use
+  the -q option to set the quality when compressing to JPEG.
+
++ Fixed "crop" not to drop the palette for "P" images.
+
++ Added and verified FLC support.
+
++ Paste with "L" or "RGBA" alpha is now several times faster on most
+  platforms.
+
++ Changed Image.new() to initialize the image to black, as described
+  in the handbook.  To get an uninitialized image, use None as the
+  colour.
+
++ Fixed the PDF encoder to produce a valid header; Acrobat no longer
+  complains when you load PDF images created by PIL.
+
++ PIL only scans fully-qualified directory names in the path when
+  looking for plugins.
+  *** WARNING: MAY BREAK EXISTING CODE ***
+
++ Faster implementation of "save" used when filename is given,
+  or when file object has "fileno" and "flush" methods.
+
++ Don't crash in "crop" if region extends outside the source image.
+
++ Eliminated a massive memory leak in the "save" function.
+
++ The GIF decoder doesn't crash if the code size is set to an illegal
+  value.  This could happen since another bug didn't handle local
+  palettes properly if they didn't have the same size as the
+  global palette (not very common).
+
++ Added predictor support (TIFF 6.0 section 14) to the TIFF decoder.
+
++ Fixed palette and padding problems in BMP driver.  Now properly
+  writes "1", "L", "P" and "RGB" images.
+
++ Fixed getpixel()/getdata() to return correct pixel values.
+
++ Added PSD (PhotoShop) read support.  Reads both uncompressed
+  and compressed images of most types.
+
++ Added GIF write support (writes "uncompressed" GIF files only,
+  due to unresolvable licensing issues).  The "gifmaker.py" script
+  can be used to create GIF animations.
+
++ Reads 8-bit "L" and "P" TGA images.  Also reads 16-bit "RGB"
+  images.
+
++ Added FLI read support.  This driver has only been tested
+  on a few FLI samples.
+
++ Reads 2-bit and 4-bit PCX images.
+
++ Added MSP read and write support.  Both version 1 and 2 can be
+  read, but only version 1 (uncompressed) files are written.
+
++ Fixed a bug in the FLI/FLC identification code that caused the
+  driver to raise an exception when parsing valid FLI/FLC files.
+
++ Improved performance when loading file format plugins, and when
+  opening files.
+
++ Added GIF animation support, via the "seek" and "tell" methods.
+  You can use "player.py" to play an animated GIF file.
+
++ Removed MNG support, since the spec is changing faster than I
+  can change the code.  I've added support for the experimental
+  ARG format instead.  Contact me for more information on this
+  format.
+
++ Added keyword options to the "save" method.  The following options
+  are currently supported:
+
+      format	option		description
+      --------------------------------------------------------
+      JPEG	optimize	minimize output file at the
+				expense of compression speed.
+
+      JPEG	progressive	enable progressive output. the
+				option value is ignored.
+
+      JPEG	quality		set compression quality (1-100).
+				the default value is 75.
+
+      JPEG	smooth		smooth dithered images.  value
+				is strengh (1-100).  default is
+				off (0).
+
+      PNG	optimize	minimize output file at the
+				expense of compression speed.
+
+  Expect more options in future releases.  Also note that
+  file writers silently ignore unknown options.
+
++ Plugged memory leaks in the PNG and TIFF decoders.
+
++ Added PNG write support.
+
++ (internal) RGB unpackers and converters now set the pad byte
+  to 255 (full opacity).
+
++ Properly handles the "transparency" property for GIF, PNG
+  and XPM files.
+
++ Added a "putalpha" method, allowing you to attach a "1" or "L"
+  image as the alpha layer to an "RGBA" image.
+
++ Various improvements to the sample scripts:
+
+  "pilconvert"  Carries out some extra tricks in order to make
+		the resulting file as small as possible.
+
+  "explode"	(NEW) Split an image sequence into individual frames.
+
+  "gifmaker"	(NEW) Convert a sequence file into a GIF animation.
+		Note that the GIF encoder create "uncompressed" GIF
+		files, so animations created by this script are
+		rather large (typically 2-5 times the compressed
+		sizes).
+
+  "image2py"	(NEW) Convert a single image to a python module.  See
+		comments in this script for details.
+
+  "player"	If multiple images are given on the command line,
+		they are interpreted as frames in a sequence.  The
+		script assumes that they all have the same size.
+		Also note that this script now can play FLI/FLC
+		and GIF animations.
+
+		This player can also execute embedded Python
+		animation applets (ARG format only).
+
+  "viewer"	Transparent images ("P" with transparency property,
+		and "RGBA") are superimposed on the standard Tk back-
+		ground.
+
++ Fixed colour argument to "new".  For multilayer images, pass a
+  tuple: (Red, Green, Blue), (Red, Green, Blue, Alpha), or (Cyan,
+  Magenta, Yellow, Black).
+
++ Added XPM (X pixmap) read support.
+
+(0.2b3 released)
+
++ Added MNG (multi-image network graphics) read support.  "Ming"
+  is a proposed animation standard, based on the PNG file format.
+
+  You can use the "player" sample script to display some flavours
+  of this format.  The MNG standard is still under development, 
+  as is this driver.  More information, including sample files,
+  can be found at <ftp://swrinde.nde.swri.edu/pub/mng>
+
++ Added a "verify" method to images loaded from file.  This method
+  scans the file for errors, without actually decoding the image
+  data, and raises a suitable exception if it finds any problems.
+  Currently implemented for PNG and MNG files only.
+
++ Added support for interlaced GIF images.
+
++ Added PNG read support -- if linked with the ZLIB compression library,
+  PIL reads all kinds of PNG images, except interlaced files.
+
++ Improved PNG identification support -- doesn't mess up on unknown
+  chunks, identifies all possible PNG modes, and verifies checksum
+  on PNG header chunks.
+
++ Added an experimental reader for placable Windows Meta Files (WMF).
+  This reader is still very incomplete, but it illustrates how PIL's
+  drawing capabilities can be used to render vector and metafile
+  formats.
+
++ Added restricted drivers for images from Image Tools (greyscale
+  only) and LabEye/IFUNC (common interchange modes only).
+
++ Some minor improvements to the sample scripts provided in the
+  "Scripts" directory.
+
++ The test images have been moved to the "Images" directory.
+
+(0.2b2 released)
+(0.2b1 released; Windows only)
+
++ Fixed filling of complex polygons.  The ImageDraw "line" and
+  "polygon" methods also accept Path objects.
+
++ The ImageTk "PhotoImage" object can now be constructed directly
+  from an image.  You can also pass the object itself to Tkinter,
+  instead of using the "image" attribute.  Finally, using "paste"
+  on a displayed image automatically updates the display.
+
++ The ImageTk "BitmapImage" object allows you to create transparent
+  overlays from 1-bit images.  You can pass the object itself to
+  Tkinter.  The constructor takes the same arguments as the Tkinter
+  BitmapImage class; use the "foreground" option to set the colour
+  of the overlay.
+
++ Added a "putdata" method to the Image class.  This can be used to
+  load a 1-layer image with data from a sequence object or a string.
+  An optional floating point scale and offset can be used to adjust
+  the data to fit into the 8-bit pixel range.  Also see the "getdata"
+  method.
+
++ Added the EXTENT method to the Image "transform" method.  This can
+  be used to quickly crop, stretch, shrink, or mirror a subregion
+  from another image.
+
++ Adapted to Python 1.4.
+
++ Added a project makefile for Visual C++ 4.x.  This allows you to
+  easily build a dynamically linked version of PIL for Windows 95
+  and NT.
+
++ A Tk "booster" patch for Windows is available.  It gives dramatic
+  performance improvements for some displays.  Has been tested with
+  Tk 4.2 only, but is likely to work with Tk 4.1 as well.  See the Tk
+  subdirectory for details.
+
++ You can now save 1-bit images in the XBM format.  In addition, the
+  Image class now provides a "tobitmap" method which returns a string
+  containing an XBM representation of the image.  Quite handy to use
+  with Tk.
+
++ More conversions, including "RGB" to "1" and more.
+
+(0.2a1 released)
+
++ Where earlier versions accepted lists, this version accepts arbitrary
+  Python sequences (including strings, in some cases).  A few resource
+  leaks were plugged in the process.
+
++ The Image "paste" method now allows the box to extend outside
+  the target image.  The size of the box, the image to be pasted,
+  and the optional mask must still match.
+
++ The ImageDraw module now supports filled polygons, outlined and
+  filled ellipses, and text.  Font support is rudimentary, though.
+
++ The Image "point" method now takes an optional mode argument,
+  allowing you to convert the image while translating it.  Currently,
+  this can only be used to convert "L" or "P" images to "1" images
+  (creating thresholded images or "matte" masks).
+
++ An Image "getpixel" method has been added.  For single band images,
+  it returns the pixel value at a given position as an integer.
+  For n-band images, it returns an n-tuple of integers.
+
++ An Image "getdata" method has been added.  It returns a sequence
+  object representing the image as a 1-dimensional array.  Only len()
+  and [] can be used with this sequence.  This method returns a
+  reference to the existing image data, so changes in the image
+  will be immediately reflected in the sequence object.
+
++ Fixed alignment problems in the Windows BMP writer.
+
++ If converting an "RGB" image to "RGB" or "L", you can give a second
+  argument containing a colour conversion matrix.
+
++ An Image "getbbox" method has been added.  It returns the bounding
+  box of data in an image, considering the value 0 as background.
+
++ An Image "offset" method has been added.  It returns a new image
+  where the contents of the image have been offset the given distance
+  in X and/or Y direction.  Data wraps between edges.
+
++ Saves PDF images.  The driver creates a binary PDF 1.1 files, using
+  JPEG compression for "L", "RGB", and "CMYK" images, and hex encoding
+  (same as for PostScript) for other formats.
+
++ The "paste" method now accepts "1" masks.  Zero means transparent,
+  any other pixel value means opaque.  This is faster than using an
+  "L" transparency mask.
+
++ Properly writes EPS files (and properly prints images to postscript
+  printers as well).
+
++ Reads 4-bit BMP files, as well as 4 and 8-bit Windows ICO and CUR
+  files.  Cursor animations are not supported.
+
++ Fixed alignment problems in the Sun raster loader.
+
++ Added "draft" and "thumbnail" methods.  The draft method is used
+  to optimize loading of JPEG and PCD files, the thumbnail method is
+  used to create a thumbnail representation of an image.
+
++ Added Windows display support, via the ImageWin class (see the
+  handbook for details).
+
++ Added raster conversion for EPS files.  This requires GNU or Aladdin
+  Ghostscript, and probably works on UNIX only.
+
++ Reads PhotoCD (PCD) images.  The base resolution (768x512) can be
+  read from a PhotoCD file.
+
++ Eliminated some compiler warnings.  Bindings now compile cleanly in C++
+  mode.  Note that the Imaging library itself must be compiled in C mode.
+
++ Added "bdf2pil.py", which converts BDF fonts into images with associated
+  metrics.  This is definitely work in progress.  For info, see description
+  in script for details.
+
++ Fixed a bug in the "ImageEnhance.py" module.
+
++ Fixed a bug in the netpbm save hack in "GifImagePlugin.py"
+
++ Fixed 90 and 270 degree rotation of rectangular images.
+
++ Properly reads 8-bit TIFF palette-color images.
+
++ Reads plane separated RGB and CMYK TIFF images.
+
++ Added driver debug mode.  This is enabled by setting Image.DEBUG
+  to a non-zero value.  Try the -D option to "pilfile.py" and see what
+  happens.
+
++ Don't crash on "atend" constructs in PostScript files.
+
++ Only the Image module imports _imaging directly.  Other modules
+  should refer to the binding module as "Image.core".
+
+*** Changes from release 0.0 to 0.1 (b1) ***
+
++ A handbook is available (distributed separately).
+
++ The coordinate system is changed so that (0,0) is now located
+  in the upper left corner.  This is in compliancy with ISO 12087
+  and 90% of all other image processing and graphics libraries.
+
++ Modes "1" (bilevel) and "P" (palette) have been introduced.  Note
+  that bilevel images are stored with one byte per pixel.
+
++ The Image "crop" and "paste" methods now accepts None as the
+  box argument, to refer to the full image (self, that is).
+
++ The Image "crop" method now works properly.
+
++ The Image "point" method is now available.  You can use either a
+  lookup table or a function taking one argument.
+
++ The Image join function has been renamed to "merge".
+
++ An Image "composite" function has been added.  It is identical
+  to copy() followed by paste(mask).
+
++ An Image "eval" function has been added.  It is currently identical
+  to point(function); that is, only a single image can be processed.
+
++ A set of channel operations has been added.  See the "ImageChops"
+  module, test_chops.py, and the handbook for details.
+
++ Added the "pilconvert" utility, which converts image files.  Note
+  that the number of output formats are still quite restricted.
+
++ Added the "pilfile" utility, which quickly identifies image files
+  (without loading them, in most cases).
+
++ Added the "pilprint" utility, which prints image files to Postscript
+  printers.
+
++ Added a rudimentary version of the "pilview" utility, which is
+  simple image viewer based on Tk.  Only File/Exit and Image/Next
+  works properly.
+
++ An interface to Tk has been added.  See "Lib/ImageTk.py" and README
+  for details.
+
++ An interface to Jack Jansen's Img library has been added (thanks to
+  Jack).  This allows you to read images through the Img extensions file
+  format handlers.  See the file "Lib/ImgExtImagePlugin.py" for details.
+
++ Postscript printing is provided through the PSDraw module.  See the
+  handbook for details.
+Imaging/README
+
+Imaging/CHANGES
+
+Imaging/CONTENTS
+Imaging/MANIFEST
+
+Imaging/BUILDME
+
+Imaging/setup.py
+
+Imaging/selftest.py
+Imaging/doctest.py
+
+Imaging/libImaging/Imaging.h
+Imaging/libImaging/ImDib.h
+Imaging/libImaging/ImPlatform.h
+
+Imaging/libImaging/Quant.h
+Imaging/libImaging/QuantHash.h
+Imaging/libImaging/QuantHeap.h
+Imaging/libImaging/QuantDefines.h
+Imaging/libImaging/QuantTypes.h
+
+Imaging/libImaging/Access.c
+Imaging/libImaging/Antialias.c
+Imaging/libImaging/Bands.c
+Imaging/libImaging/Blend.c
+Imaging/libImaging/Chops.c
+Imaging/libImaging/Convert.c
+Imaging/libImaging/ConvertYCbCr.c
+Imaging/libImaging/Copy.c
+Imaging/libImaging/Crc32.c
+Imaging/libImaging/Crop.c
+Imaging/libImaging/Dib.c
+Imaging/libImaging/Draw.c
+Imaging/libImaging/Effects.c
+Imaging/libImaging/Except.c
+Imaging/libImaging/File.c
+Imaging/libImaging/Fill.c
+Imaging/libImaging/Filter.c
+Imaging/libImaging/Geometry.c
+Imaging/libImaging/GetBBox.c
+Imaging/libImaging/Histo.c
+Imaging/libImaging/Matrix.c
+Imaging/libImaging/ModeFilter.c
+Imaging/libImaging/Negative.c
+Imaging/libImaging/Offset.c
+Imaging/libImaging/Pack.c
+Imaging/libImaging/Palette.c
+Imaging/libImaging/Paste.c
+Imaging/libImaging/Point.c
+Imaging/libImaging/Quant.c
+Imaging/libImaging/QuantHash.c
+Imaging/libImaging/QuantHeap.c
+Imaging/libImaging/RankFilter.c
+Imaging/libImaging/Storage.c
+Imaging/libImaging/Unpack.c
+Imaging/libImaging/UnpackYCC.c
+
+Imaging/libImaging/Bit.h
+Imaging/libImaging/Gif.h
+Imaging/libImaging/Jpeg.h
+Imaging/libImaging/Lzw.h
+Imaging/libImaging/Raw.h
+Imaging/libImaging/Zip.h
+Imaging/libImaging/BitDecode.c
+Imaging/libImaging/EpsEncode.c
+Imaging/libImaging/FliDecode.c
+Imaging/libImaging/GifDecode.c
+Imaging/libImaging/GifEncode.c
+Imaging/libImaging/HexDecode.c
+Imaging/libImaging/JpegDecode.c
+Imaging/libImaging/JpegEncode.c
+Imaging/libImaging/LzwDecode.c
+Imaging/libImaging/MspDecode.c
+Imaging/libImaging/PackDecode.c
+Imaging/libImaging/PcdDecode.c
+Imaging/libImaging/PcxEncode.c
+Imaging/libImaging/PcxDecode.c
+Imaging/libImaging/RawDecode.c
+Imaging/libImaging/RawEncode.c
+Imaging/libImaging/SunRleDecode.c
+Imaging/libImaging/TgaRleDecode.c
+Imaging/libImaging/XbmDecode.c
+Imaging/libImaging/XbmEncode.c
+Imaging/libImaging/ZipDecode.c
+Imaging/libImaging/ZipEncode.c
+
+Imaging/_imaging.c
+Imaging/decode.c
+Imaging/encode.c
+Imaging/display.c
+Imaging/map.c
+Imaging/outline.c
+Imaging/path.c
+
+Imaging/_imagingtk.c
+Imaging/_imagingft.c
+Imaging/_imagingmath.c
+
+Imaging/PIL.pth
+Imaging/PIL/__init__.py
+Imaging/PIL/ArgImagePlugin.py
+Imaging/PIL/BdfFontFile.py
+Imaging/PIL/BmpImagePlugin.py
+Imaging/PIL/BufrStubImagePlugin.py
+Imaging/PIL/ContainerIO.py
+Imaging/PIL/CurImagePlugin.py
+Imaging/PIL/DcxImagePlugin.py
+Imaging/PIL/EpsImagePlugin.py
+Imaging/PIL/ExifTags.py
+Imaging/PIL/FitsStubImagePlugin.py
+Imaging/PIL/FliImagePlugin.py
+Imaging/PIL/FontFile.py
+Imaging/PIL/FpxImagePlugin.py
+Imaging/PIL/GbrImagePlugin.py
+Imaging/PIL/GdImageFile.py
+Imaging/PIL/GifImagePlugin.py
+Imaging/PIL/GimpGradientFile.py
+Imaging/PIL/GimpPaletteFile.py
+Imaging/PIL/GribStubImagePlugin.py
+Imaging/PIL/Hdf5StubImagePlugin.py
+Imaging/PIL/IcoImagePlugin.py
+Imaging/PIL/IcnsImagePlugin.py
+Imaging/PIL/Image.py
+Imaging/PIL/ImageChops.py
+Imaging/PIL/ImageColor.py
+Imaging/PIL/ImageDraw.py
+Imaging/PIL/ImageDraw2.py
+Imaging/PIL/ImageEnhance.py
+Imaging/PIL/ImageFile.py
+Imaging/PIL/ImageFileIO.py
+Imaging/PIL/ImageFilter.py
+Imaging/PIL/ImageFont.py
+Imaging/PIL/ImageGL.py
+Imaging/PIL/ImageGrab.py
+Imaging/PIL/ImageMath.py
+Imaging/PIL/ImageMode.py
+Imaging/PIL/ImageOps.py
+Imaging/PIL/ImagePalette.py
+Imaging/PIL/ImagePath.py
+Imaging/PIL/ImageQt.py
+Imaging/PIL/ImageSequence.py
+Imaging/PIL/ImageStat.py
+Imaging/PIL/ImageTk.py
+Imaging/PIL/ImageTransform.py
+Imaging/PIL/ImageWin.py
+Imaging/PIL/ImImagePlugin.py
+Imaging/PIL/ImtImagePlugin.py
+Imaging/PIL/IptcImagePlugin.py
+Imaging/PIL/JpegImagePlugin.py
+Imaging/PIL/McIdasImagePlugin.py
+Imaging/PIL/MicImagePlugin.py
+Imaging/PIL/MpegImagePlugin.py
+Imaging/PIL/MspImagePlugin.py
+Imaging/PIL/OleFileIO.py
+Imaging/PIL/PaletteFile.py
+Imaging/PIL/PalmImagePlugin.py
+Imaging/PIL/PcdImagePlugin.py
+Imaging/PIL/PcfFontFile.py
+Imaging/PIL/PcxImagePlugin.py
+Imaging/PIL/PdfImagePlugin.py
+Imaging/PIL/PixarImagePlugin.py
+Imaging/PIL/PngImagePlugin.py
+Imaging/PIL/PpmImagePlugin.py
+Imaging/PIL/PsdImagePlugin.py
+Imaging/PIL/PSDraw.py
+Imaging/PIL/SgiImagePlugin.py
+Imaging/PIL/SpiderImagePlugin.py
+Imaging/PIL/SunImagePlugin.py
+Imaging/PIL/TarIO.py
+Imaging/PIL/TgaImagePlugin.py
+Imaging/PIL/TiffImagePlugin.py
+Imaging/PIL/TiffTags.py
+Imaging/PIL/WalImageFile.py
+Imaging/PIL/WmfImagePlugin.py
+Imaging/PIL/XbmImagePlugin.py
+Imaging/PIL/XpmImagePlugin.py
+Imaging/PIL/XVThumbImagePlugin.py
+
+Imaging/Docs/index.html
+Imaging/Docs/effbot.css
+Imaging/Docs/pythondoc-PIL.ArgImagePlugin.html
+Imaging/Docs/pythondoc-PIL.BdfFontFile.html
+Imaging/Docs/pythondoc-PIL.BmpImagePlugin.html
+Imaging/Docs/pythondoc-PIL.BufrStubImagePlugin.html
+Imaging/Docs/pythondoc-PIL.ContainerIO.html
+Imaging/Docs/pythondoc-PIL.CurImagePlugin.html
+Imaging/Docs/pythondoc-PIL.DcxImagePlugin.html
+Imaging/Docs/pythondoc-PIL.EpsImagePlugin.html
+Imaging/Docs/pythondoc-PIL.ExifTags.html
+Imaging/Docs/pythondoc-PIL.FitsStubImagePlugin.html
+Imaging/Docs/pythondoc-PIL.FliImagePlugin.html
+Imaging/Docs/pythondoc-PIL.FontFile.html
+Imaging/Docs/pythondoc-PIL.FpxImagePlugin.html
+Imaging/Docs/pythondoc-PIL.GbrImagePlugin.html
+Imaging/Docs/pythondoc-PIL.GdImageFile.html
+Imaging/Docs/pythondoc-PIL.GifImagePlugin.html
+Imaging/Docs/pythondoc-PIL.GimpGradientFile.html
+Imaging/Docs/pythondoc-PIL.GimpPaletteFile.html
+Imaging/Docs/pythondoc-PIL.GribStubImagePlugin.html
+Imaging/Docs/pythondoc-PIL.Hdf5StubImagePlugin.html
+Imaging/Docs/pythondoc-PIL.IcoImagePlugin.html
+Imaging/Docs/pythondoc-PIL.IcnsImagePlugin.html
+Imaging/Docs/pythondoc-PIL.Image.html
+Imaging/Docs/pythondoc-PIL.ImageChops.html
+Imaging/Docs/pythondoc-PIL.ImageColor.html
+Imaging/Docs/pythondoc-PIL.ImageDraw.html
+Imaging/Docs/pythondoc-PIL.ImageEnhance.html
+Imaging/Docs/pythondoc-PIL.ImageFile.html
+Imaging/Docs/pythondoc-PIL.ImageFileIO.html
+Imaging/Docs/pythondoc-PIL.ImageFilter.html
+Imaging/Docs/pythondoc-PIL.ImageFont.html
+Imaging/Docs/pythondoc-PIL.ImageGL.html
+Imaging/Docs/pythondoc-PIL.ImageGrab.html
+Imaging/Docs/pythondoc-PIL.ImageOps.html
+Imaging/Docs/pythondoc-PIL.ImagePalette.html
+Imaging/Docs/pythondoc-PIL.ImagePath.html
+Imaging/Docs/pythondoc-PIL.ImageSequence.html
+Imaging/Docs/pythondoc-PIL.ImageStat.html
+Imaging/Docs/pythondoc-PIL.ImageTk.html
+Imaging/Docs/pythondoc-PIL.ImageTransform.html
+Imaging/Docs/pythondoc-PIL.ImageWin.html
+Imaging/Docs/pythondoc-PIL.ImImagePlugin.html
+Imaging/Docs/pythondoc-PIL.ImtImagePlugin.html
+Imaging/Docs/pythondoc-PIL.IptcImagePlugin.html
+Imaging/Docs/pythondoc-PIL.JpegImagePlugin.html
+Imaging/Docs/pythondoc-PIL.McIdasImagePlugin.html
+Imaging/Docs/pythondoc-PIL.MicImagePlugin.html
+Imaging/Docs/pythondoc-PIL.MpegImagePlugin.html
+Imaging/Docs/pythondoc-PIL.MspImagePlugin.html
+Imaging/Docs/pythondoc-PIL.OleFileIO.html
+Imaging/Docs/pythondoc-PIL.PaletteFile.html
+Imaging/Docs/pythondoc-PIL.PalmImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PcdImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PcfFontFile.html
+Imaging/Docs/pythondoc-PIL.PcxImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PdfImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PixarImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PngImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PpmImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PsdImagePlugin.html
+Imaging/Docs/pythondoc-PIL.PSDraw.html
+Imaging/Docs/pythondoc-PIL.SgiImagePlugin.html
+Imaging/Docs/pythondoc-PIL.SpiderImagePlugin.html
+Imaging/Docs/pythondoc-PIL.SunImagePlugin.html
+Imaging/Docs/pythondoc-PIL.TarIO.html
+Imaging/Docs/pythondoc-PIL.TgaImagePlugin.html
+Imaging/Docs/pythondoc-PIL.TiffImagePlugin.html
+Imaging/Docs/pythondoc-PIL.TiffTags.html
+Imaging/Docs/pythondoc-PIL.WalImageFile.html
+Imaging/Docs/pythondoc-PIL.WmfImagePlugin.html
+Imaging/Docs/pythondoc-PIL.XbmImagePlugin.html
+Imaging/Docs/pythondoc-PIL.XpmImagePlugin.html
+Imaging/Docs/pythondoc-PIL.XVThumbImagePlugin.html
+
+Imaging/Scripts/pilconvert.py
+Imaging/Scripts/pildriver.py
+Imaging/Scripts/pilfile.py
+Imaging/Scripts/pilfont.py
+Imaging/Scripts/pilprint.py
+
+Imaging/Images/lena.gif
+Imaging/Images/lena.ppm
+Imaging/Images/lena.jpg
+
+Imaging/Images/courB08.bdf
+Imaging/Images/courB08.pbm
+Imaging/Images/courB08.pil
+
+Imaging/Sane/README
+Imaging/Sane/CHANGES
+Imaging/Sane/setup.py
+Imaging/Sane/sanedoc.txt
+Imaging/Sane/_sane.c
+Imaging/Sane/sane.py
+Imaging/Sane/demo_numarray.py
+Imaging/Sane/demo_pil.py
+
+Imaging/Scripts/README
+Imaging/Scripts/enhancer.py
+Imaging/Scripts/explode.py
+Imaging/Scripts/gifmaker.py
+Imaging/Scripts/image2py.py
+Imaging/Scripts/painter.py
+Imaging/Scripts/player.py
+Imaging/Scripts/viewer.py
+Imaging/Scripts/thresholder.py
+
+Imaging/Tk/tkImaging.c
+Imaging/Tk/install.txt
+Imaging/Tk/booster.txt
+Imaging/Tk/pilbitmap.txt
+

File Docs/effbot.css

+/* effbot.css */
+
+BODY {
+    font: 100% Georgia, Times, serif;
+    color: black;
+    margin: 0px 20px 0px 20px;
+}
+
+#effbot-body {
+    background: white;
+    padding: 10px 40px 10px 40px;
+    max-width: 50em;
+}
+
+#effbot-menu {
+    display: none;
+}
+
+.adsense {
+    background: #f8fff8;
+    border: 1px solid #084; 
+    padding: 10px 4px 4px 4px;
+}
+
+.sidebar {
+    border: 1px solid #000; 
+    float: right; clear: right;
+    width: 200px;
+    background: white;
+    padding: 10px;
+    margin: 0px -25px 10px 0px;
+}
+
+/* visual style */
+
+P {
+    line-height: 1.3em;
+}
+
+CODE, PRE {
+    font: 100% "Courier New", Courier, Monaco, monospace;
+    color: #042; margin-left: 20px; 
+}
+
+H1, H2, H3 {
+    font-family: Georgia, Times, serif;