the labs proudly presents PIL 1.1.4 final:
The Python Imaging Library (PIL) adds image processing capabilities
to your Python interpreter. This library supports many file formats,
and provides powerful image processing and graphics capabilities,
including display support for Windows and Tkinter.
Version 1.1.4 adds improved build scripts, truetype/opentype font
support, memory mapping support also for non-Windows platforms,
screen and clipboard grabbing on Windows, support for CSS-style
color strings, support for IPTC/NAA and EXIF metadata, and more.
See below for a full list.
Get your copy of the source kit here:
the pil team
"Secret Labs -- makers of fine pythonware since 1997."
-- changes in this version (relative to 1.1.3) --
+ 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).
+ 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
This interface will most likely change in future versions.
+ Fixed a bug when using the "transparency" option with the GIF
+ 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
+ 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)
+ 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
+ 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.
+ 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
+ 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
+ Added "putdata" support for mode "I", "F" and "RGB".
+ The GIF writer now supports the transparency option (from
+ 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.
-- end --
The deadline for Python 11 - OSCON 2003 early bird registration is May 23rd,
2003. The conference will be held July 7-11, 2003 in Portland, Oregon, USA.
Save up to $400 when you register by May 23rd for the Python 11/OSCON 2003
conference. Additional discounts are available.
I'm including the text of the special discounts available for the conference
below since they are quite significant; see the URL above for further info
and mailto links. All of the discounts listed at the bottom of the
registration page are in addition to the early bird discount. The early bird
discount is (obviously) time-limited, but the others are not.
Early Bird Pricing - Save up to $400 when you register by May 23, 2003.
SPECIAL TUTORIAL OFFER - Buy 2 tutorials, get 2 free (when you purchase a
full conference pass).
Full Time Student - 65% off with proof of status, a copy of ID & class
schedule. Fax to 707-829-1342. Please use os03st in discount field.
Academic Instructor - 50% off with proof of full time academic instructor
status on organization letterhead. Fax to 707-829-1342. Please use os03ac in
Academic Staff - 25% off with proof of full time academic employee status on
organization letterhead. Fax to 707-829-1342. Please use os03sa in discount
Company Team Discount - 10% off per person if you register 3 or more people
from one company. Please use os03team in discount field. Proof of status of
employment for each attendee must be faxed to 707-829-1342.
Federal Government Discount - 20% off with proof of agency connection. Use
discount code, os03gov, and fax to 707-829-1342.
User Group Members - UG discounts are available. For discount information or
to see if your group is eligible please email Marsee Henon for details. To
sign your group up with the O'Reilly User Group Program please go to
Alumni - Have you attended one of our O'Reilly conferences? If so, you are
eligible for a 30% alumni discount. Please email Linda Holder for
verification and your special discount code.
Kevin Altis, Python 11 co-chair
This is a maintenance release of PyTables. Due to a problem with an specific
optimization in PyTables 0.5, it does not work with numarray 0.4 (although
it works just fine with numarray 0.5). Thanks to Marc Gehling for reporting
Todd Miller has already warned me that this optimization was not safe, so I
am *disabling* it in 0.5.1. The consequence is that the 20% of improvement
during reading tables has almost evaporated to a rather small 4%, but that's
If you already have installed PyTables 0.5, I strongly suggest you to
upgrade to 0.5.1, even if you are already using numarray 0.5. I will try to
further investigate the problem, and, if a good solution is found, I will
enable again the optimization in a future release.
Another new thing you can find in 0.5.1 is that the use of "UInt64" data
types has been removed (it has been replaced by the "Int64" type) of the
tutorial chapters in User's Manual. I've done that because the numarray
Windows version does not support such a type (due to MSVC compiler
limitations). Now, the tutorial section should run fine in all the supported
platforms (even Windows).
My apologies for being a sinner and trying to optimize too soon ;-)
Go to the PyTables web site for more details:
Share your experience
Let me know of any bugs, suggestions, gripes, kudos, etc. you may
-- Francesc Alted
CHARLEROI, MAY 12th 2003 - Second Annual European Python
and Zope Conference to be held in Charleroi, Belgium on
June 25-27, 2003.
Announcing: European Python and Zope Conference 2003
Annual event for growing developer community in Europe.
Open source leaders to give keynotes
European Python and Zope Conference 2003
June 25-27, 2003
Only once a year do European software developers have the
opportunity to learn about Python, the fastest growing,
sophisticated open source application development platform.
The second annual Europython conference, being held this
year in Charleroi, Belgium on June 25-27, 2003, is also an
opportunity to meet with fellow developers and exchange
ideas and experiences. With keynote speeches
that include the creator of Python; a renowned trainer and
mentor in the C++ world; as well as major
developer activities, the conference promises to be a
breakthrough event for open software in Europe.
The EuroPython conference is the premiere venue for meeting
Python and Zope developers from Europe and beyond. As one
of the first community-organized Python and Zope
conferences, the EuroPython Conference delivers the
atmosphere and information developers want.
Hundreds of new and experienced developers attending the
conference will see a full program, including:
Keynote by Guido van Rossum, creator of Python. He created
Python in the early 1990s at CWI in Amsterdam (the National
Research Institute for Mathematics and Computer Science in
the Netherlands). He is still actively involved in the
development of the language. In 1995 he moved to the US
where he now works for Zope Corporation as Director of
PythonLabs, the core Python development group hosted by the
Keynote by Francis Glassborow, a renowned trainer and mentor
in the C++ world. Over 8 years as Chairman of the
Association of C & C++ Users, he built up a flourishing
organisation which hosts a successful conference and
associated standards committee meetings, publishes several
journals, and has a strong community embracing the authors
and leading lights of C++, Java and now Python.
The conference program has over 50 presentations and
tutorials in 5 tracks, including Python In Business, Python
Frameworks, Python Language, Python In Science and
Industry, and Zope. The program contains tutorials,
presentations, lightning talks, and "birds of a feather"
gatherings. Additional events include a PyPy and Zope3
EuroPython 2003 will be held in Charleroi, Belgium, a city
close to Brussels. Space is filling quickly, so early
registration at the EuroPython website
(http://www.europython.org) is encouraged. Student
discounts are available.
The EuroPython 2003 conference continues this year's series
of open source developer events in Europe, including FOSDEM
and Python-UK, which each attracted thousands of attendees.
Like these conferences, EuroPython 2003 is organized by a
volunteer group of open source developers.
Python is a leading object-oriented open source programming
language that runs on all modern platforms. By integrating
ease-of-use, clarity in coding, enterprise application
connectivity and rapid application design, Python is an
ideal programming platform for todays IT challenges.
More information, including the Python source code and
binaries for Linux and Windows, are available at
Zope is a leading open source application server,
specializing in content management, portals, and custom
applications. Since Zope Corporation introduced Zope as an
open source product in 1998, it has become the platform of
choice for content publishers, managers and application
developers. Zope comes with complete source code, most of
which is written in Python.
More information, including the Zope source code and
binaries for Linux and Windows, are available at
Python and Zope are maintained and enhanced in open source
fashion by an international community of programmers and
EuroPython Conference Team
P3B c/o Aragne
Boulevard Giniral Michel 1E
Denis Frhre, mailto:firstname.lastname@example.org, tel: +32(0)479.651.442
Tom Deprez, mailto:email@example.com, tel: +32(0)2.479.63.88
Nicolas Chauvat, mailto:firstname.lastname@example.org, tel: +33
Marc-Andri Lemburg, mailto:email@example.com, tel: +49(0)
Martijn Faassen, mailto:firstname.lastname@example.org, tel: +31(0)
ReportLab Europe Ltd, tel: +44-20-8540-9926
Tim Couper, mailto:email@example.com, tel: +44 (0)1582 463120
Naja is a freeware tool written in Python/wxPython.
Naja is a download manager and a website grabber. It can be used for
extract JPEG images from news server.
Version 0.7.9 of Naja has been released and is available for download
from the Keyphrene web site:
Announcing PyTables 0.5
This is the second public beta release. On this release you will find
a 20% of I/O speed improvement over the previous one (0.4), some bugs
has been fixed and support for a couple of compression (LZO and UCL)
libraries has been added, and... a long awaited Windows version is
More in detail:
- As a consequence of some twiking the write/read performance has been
improved by a 20% overall. One particular case were performance has
largely increased (0.5 is up to 6 times faster than 0.4) is when
column elements are unidimensional arrays. This impressive speed-up
is mainly because of the recent improvements in numarray 0.5
performance (good work, folks!). With that, the reading speed is
reaching its theoretical maximum (at least when using the current
data access schema).
- When reading a Table object, and the user wants to fetch column
elements which are unidimensional arrays, a copy of the array from
the I/O buffer is delivered automatically to him, so that there is
no need to make a call to .copy() method of the numarray arrays
anymore. It think this is more comfortable for the user.
- The compression was enabled by default in version 0.4, despite of
what was stated in the documentation. Now, this has been corrected
and compression is *disabled* by default.
- Support for two new compression libraries: LZO and UCL
(http://www.oberhumer.com/opensource/). These libraries are made by
Markus F.X.J. Oberhumer, and they stand for allowing *very* fast
decompression. Now, if your data is compressible, you can obtain
better reading speed than if not using compression at all!. The
improvement is still more noticeable if your are dealing with
extremely large (and compressible) data sets. Read the online
documentation for more info about that:
- A couple of memory leaks has been isolated and fixed (it was
hard, but I finally did it!).
- A bug with column ordering of tables that happens in some special
situations has been fixed (thanks to Stan Heckman for reporting this
and suggesting the patch).
- File class has now an 'isopen' attribute in order to check if a file
is open or not.
- Updated documentation, specially for giving advice about the use of
the new compression libraries. See "Compression issues" subsection,
(also on the web:
- Added more unit tests (up to 218 now!)
- PyTables has been tested against newest numarray 0.5 and it works
just fine. It even works well with Python 2.3b1.
- And last, but not least, a Windows version is available!. Thanks to
Alan McIntyre for its porting!. There is even a binary ready for
click and install.
What it is
In short, PyTables provides a powerful and very Pythonic interface to
process and organize your table and array data on disk.
Its goal is to enable the end user to manipulate easily scientific
data tables and Numerical and numarray Python objects in a persistent
hierarchical structure. The foundation of the underlying hierarchical
data organization is the excellent HDF5 library
A table is defined as a collection of records whose values are stored
in fixed-length fields. All records have the same structure and all
values in each field have the same data type. The terms
"fixed-length" and strict "data types" seems to be quite a strange
requirement for an interpreted language like Python, but they serve a
useful function if the goal is to save very large quantities of data
(such as is generated by many scientific applications, for example) in
an efficient manner that reduces demand on CPU time and I/O resources.
Quite a bit effort has been invested to make browsing the hierarchical
data structure a pleasant experience. PyTables implements just two
(orthogonal) easy-to-use methods for browsing.
What is HDF5?
For those people who know nothing about HDF5, it is is a general
purpose library and file format for storing scientific data made at
NCSA. HDF5 can store two primary objects: datasets and groups. A
dataset is essentially a multidimensional array of data elements, and
a group is a structure for organizing objects in an HDF5 file. Using
these two basic constructs, one can create and store almost any kind of
scientific data structure, such as images, arrays of vectors, and
structured and unstructured grids. You can also mix and match them in
HDF5 files according to your needs.
I'm using Linux as the main development platform, but PyTables should
be easy to compile/install on other UNIX machines. This package has
also passed all the tests on a UltraSparc platform with Solaris 7 and
Solaris 8. It also compiles and passes all the tests on a SGI
Origin2000 with MIPS R12000 processors and running IRIX 6.5.
With Windows, PyTables has been tested with Windows 2000 Professional SP1
and Windows XP, but it should also work with other flavors.
For online code examples, have a look at
Go to the PyTables web site for more details:
Share your experience
Let me know of any bugs, suggestions, gripes, kudos, etc. you may
-- Francesc Alted
Binary installers for MacPython 2.3b1 are available at
For 2.3 MacPython will come in two flavors: MacPython-OS9 which runs on
MacOS8.6, MacOS9 and MacOSX and the all-new MacPython-OSX which
includes a normal unix-Python.
In addition to all the normal Python goodies both contain an IDE and a
large collection of modules that give access to MacOS functionality
(Carbon, QuickTime, AppleScript).
MacPython-OSX also has a Package Manager, which allows easy
installation of selected packages (either in source or binary form)
such as Numeric, PIL, wxPython and PyObjC. The latter is an exciting
new package that allows transparent bidirectional bridging with
Objective-C, thereby giving full access to Cocoa from Python.
- Jack Jansen <Jack.Jansen(a)oratrix.com>
- If I can't dance I don't want to be part of your revolution -- Emma
mxODBC Zope Database Adapter
Available for Zope 2.3 - 2.6 on
Windows, Linux and Solaris
The eGenix mxODBC Zope Database Adapter (Zope DA) allows you to easily
connect your Zope installation to just about any database backend on
the market today, giving you the reliability of the commercially
supported eGenix.com product mxODBC and the flexibility of the ODBC
standard as middle-tier architecture.
Unlike Zope's ZODBC Zope DA, the mxODBC Zope DA works on Windows
XP/NT/2000/98/95, Linux and Solaris using the same interface on all
The mxODBC Zope DA implements thread-safe connection pooling and
multiple physical connects per logical Zope connection. You can safely
run Z SQL Methods in parallel, achieving a much better performance
than ZODBC Zope DA or similar Zope database adapters under heavy load.
This makes it ideal for deployment in Zope Clusters and Zope hosting
environments where stability and high performance are a top priority.
* Zope Level 3 Database Adapter: the mxODBC Zope DA is fully
multi-threaded and can handle multiple connections to multiple
* Fully compatible to Z SQL Methods.
* Drop-in compatible to the ZODBC DA: the mxODBC Zope DA provides the
same interfaces as Zope's ZODBC DA to allow a smooth upgrade path
from this simplistic adapater to the high performance mxODBC Zope
* Fully compatible to the Znolk SQL Wizard Product and other similar
products relying on the common database schema access methods
.tables() and .columns().
* Connection Pooling: physical database connections are pooled and
kept open, to reduce the connection overhead to a minimum. This is
especially important for high latency database connections and ones
like Oracle which take a considerable amount of time to setup
* Parallel Execution of Queries on a single logical connection: the
mxODBC Zope DA can manage any number of physical connections on a
single logical connection. This enables running truly parallel Z SQL
Method queries -- a feature not available in other Zope DAs.
* Robust Mode of Operation: connections which have timed out or go
away due to network problems are automatically reconnected.
* Cross-platform Connection Objects: The Zope DA will automatically
choose the right platform specific ODBC manager for you.
* Per Connection Adjustable ODBC Interface: mxODBC comes with many
different subpackages to choose from on Unix. The Zope DA allows you
to select these subpackages on a per-connection basis.
* Per Connection Error Handling: you can tell each connection whether
it should report ODBC warnings or not; furthermore all warnings and
errors are made available as list .messages on the DatabaseConnection
* Transaction safe automatic reconnect: when the DA finds that a
connection has timed out, it automatically tries a reconnect
and replays the transaction on the connection (unlike other DAs
which break the transaction scheme by doing a reconnect without
* Built-in Schema Cache: this results in improved performance under
* Database Schema Access: all ODBC catalog methods are made available
for much better database schema inquiry. The catalog methods allow
building generic database interrogation or manipulation tools and
facilitates writing database independent Zope products.
* Lazy Connect: the mxODBC Zope DA only connects to the database
backends when a connection is actually requested. This results in a
better use of resources compared to other Zope DAs.
Version 1.0.5 introduces the following new features compared to
* Support for multi-statement queries. Z SQL Methods allow multiple
statements in a single query via the <dtml-var sql_delimiter>
feature. mxODBC Zope DA 1.0.5 now supports this feature as well.
* Lazy Connect: mxODBC Zope DA 1.0.5 only reconnects mxODBC Connection
objects if Zope requests a connection object. This results in better
use of available resources. Other Zope DAs tend to always reconnect
when loading the connection objects into memory, e.g. when loading
the folder containing the connection object, even though the
connection is not really used for anything.
In short: mxODBC Zope DA is continuing to become the number one
solution for integrating relational databases with Zope applications.
If you have already bought mxODBC Zope DA licenses, you can use these
license for the updated version as well. There is no need to buy new
licenses. The same is true for evaluation license users.
For more information on the mxODBC Zope DA, licensing and download
instructions, please visit our web-site:
Professional Python Software directly from the Source (#1, May 09 2003)
>>> Python/Zope Products & Consulting ... http://www.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
EuroPython 2003, Charleroi, Belgium: 46 days left
We've just issued the final release of Quixote 0.6. With this
release, 0.6 becomes the new stable version of Quixote; it has already
seen production use on our web site.
The change list from 0.5.1 is extensive:
* A new and preferred syntax for declaring PTL templates has been added.
Instead of 'template func(): ...', the new form is 'def func [plain] ()'.
This uses a notation that's been suggested for adding type
information to Python functions. The Emacs Python mode already handles
this properly, and it may be more compatible with future versions of
The 'template' keyword is still supported, but we encourage you
to switch to the new syntax when you get a chance.
* Rename _q_getname() to _q_lookup(). The name '_q_getname' is still
supported, but will log a warning whenever it's encountered.
This change will require users to modify their applications.
* Quixote now supports a new kind of template that automatically performs
HTML escaping. Here's an example. (Notice that the '[plain]'
annotation is changed to '[html]' to enable this feature.)
def header [html] (title):
"<title>%s</title>" % title
If the 'title' argument is something like "R&D", it will
automatically be converted to "R&D" following the rules
for escaping HTML special characters. The aim is to avoid cross-site
scripting attacks by automatically quoting unsafe characters in text.
See http://www.mems-exchange.org/software/quixote/doc/PTL.html for
more information about how this works.
This escaping is implemented using either a Python 'htmltext'
class or a C implementation. Both implementations have seen
production use on our web site.
* The form framework now uses this automatic HTML escaping. This
means that applications using the form framework will have
to either be changed to use automatic HTML escaping themselves,
or to use str() to convert 'htmltext' instances back to Python
As part of this change, form/form.py and form/form_templates.ptl
were merged into form/form.py.
for more information.
* Added a new hook, _q_resolve(), that can be used to delay
importing modules until they're actually accessed. Consult
doc/programming.txt for an explanation. (Original
suggestion and patch by Jon Corbet. In the process of adding it,
Publisher.get_component() was rearranged to clarify the logic.)
* Make Quixote a bit more friendly to multi-threaded applications
by allowing multiple simultaneous requests (patch by Titus Brown).
* Make util.xmlrpc() return an HTTP 405 Method Not Allowed error
if the method isn't a POST.
* Added demo/run_cgi.py, a script that makes it easy to write one
file CGI applications that use Quixote. See the comments at the
top of the demo/run_cgi.py file for instructions.
* Added StaticFile and StaticDirectory classes to quixote.util.
Consult doc/static-files.txt for examples. (Contributed and
documented by Hamish Lawson.)
* Added quixote.server.twisted_http, which serves a Quixote application
using the Twisted event-driven framework (www.twistedmatrix.com).
Contributed by Graham Fawcett. We don't use this code ourselves,
but patches and bug fixes from Twisted users will be gratefully
* If Quixote looks for _q_index() in a namespace and doesn't find
it, it raises AccessError (resulting in an HTTP 403 Forbidden error)
rather than failing with an ImportError. A minor side effect of
this change: Quixote will never attempt to import a module named
'_q_index', nor will it pass '_q_index' to any _q_resolve() function.
We don't expect this to be a backward compatibility problem .
* Factored out the traverse_url() and get_component() method
from the Publisher class.
* Fix generation of temporary filenames in upload.py: filename
collisions should be impossible now.
* Documented _q_exception_handler().
Please send comments and questions to c.l.python or to the
quixote-users mailing list.
"Amberley excelled at chess -- one mark, Watson, of a scheming mind."
-- Sherlock Holmes, in "The Adventure of the Retired Colourman"