Sitemap
Every page on this site, in one list. 50 of them.
Tools
All of them run in your browser. No image you open is uploaded anywhere.
- Image to ASCII art — Turn a picture into text art in your browser, adjust the width and character set, and copy the Pillow code that does...
- Colour palette from an image — Pull the main colours out of any picture by median cut, copy them as hex codes, and see the Pillow code that does the...
- Exif viewer and remover — See the camera, date and GPS data hidden in a photo, and save a clean copy with all of it removed. Runs in your...
- Favicon generator — Turn a picture into a favicon.ico holding 16, 32 and 48 pixel versions, or export single PNGs. Runs in your browser,...
- Image converter and compressor — Convert and compress images between PNG, JPEG and WEBP in your browser, resize them, see how much smaller they get, and...
- Image diff — Load two pictures and get the changed pixels highlighted, with a count and a percentage. Useful for screenshot tests...
- Image modes — See Pillow's image modes applied to your own picture, with dithering and the memory cost of each, plus when to use...
- Images to PDF — Combine several pictures into one PDF, in order, in your browser. Nothing is uploaded, and the Pillow code for the same...
- Convolution kernel designer — Type values into a 3 by 3 or 5 by 5 grid, watch the filtered image change, and copy the ImageFilter.Kernel code that...
- PIL to Pillow converter — Paste code written for the old Python Imaging Library and see what has to change to run on Pillow 10 and later. Runs in...
- Pillow playground — Resize, rotate, blur and adjust an image with sliders, see the result, and copy the Pillow code that produces it.
- Resampling filters compared — See what Pillow's four resampling filters do to your own image, side by side, with timings. The filters are implemented...
Common errors
One page per error message, with the cause and the fix.
The PIL handbook
A working reference for Pillow, which is what PIL became.
- The PIL handbook — A map of the old PIL handbook modules to what they are called today in Pillow, with links to the current documentation...
- Concepts — Bands, modes, size, the coordinate system, palettes, transparency and filters, the ideas the rest of Pillow is built on.
- A short tutorial — Opening, inspecting, converting, cropping, pasting, filtering and saving images with Pillow, the same ground the old...
- The Image module — What Image.open, new, frombytes and the Image class methods do in Pillow today, with examples and notes on what changed...
- The ImageDraw module — Drawing lines, shapes and text onto a Pillow image, including the textsize change that breaks old code.
- The ImageFilter module — Blur, sharpen, edge detection, median and rank filters, and custom kernels in Pillow.
- The ImageOps module — Autocontrast, fit, pad, contain, invert, expand, grayscale, posterize, solarize and exif_transpose.
- The ImageEnhance module — Brightness, contrast, colour and sharpness adjustments in Pillow, and what the factor actually means.
- The ImagePath module — Pillow's Path object, a compact way to hold and transform a long sequence of coordinates for drawing.
- The ImageFile module — Decoding images from a stream with Parser, handling truncated files, and what MAXBLOCK is for.
- The filter gallery — All of Pillow's ImageFilter options applied to one picture, side by side, so you can see what each actually does before...
- Format support — A table of the formats Pillow handles, whether it can read, write or both, and the catch that comes with each one.
- Mode conversions — What happens when you convert between RGB, L, 1, P and CMYK, what each conversion costs you, and the conversions that...
Tkinter
An introduction written for Python 3 and the themed widgets.
- An introduction to Tkinter — A practical Tkinter introduction covering windows, widgets, the three geometry managers, events, the main loop and...
- Hello, tkinter — The first Tkinter program, explained line by line, and the second one written as a class the way real applications are.
- Events and bindings — How Tkinter events work, the pattern syntax, what the event object holds, and which widget receives what.
- Widget styling — Styling ttk widgets with the Style object, themes, states, and how it differs from the old per widget options.
- Fonts — Specifying fonts in Tkinter, the tuple form, the Font object, named fonts, and measuring text.
- Tk colour names — The complete list of colour names Tkinter understands, with hex values, taken from the X11 colour database that Tk...
PIL, and what replaced it
- PIL is now Pillow — The Python Imaging Library stopped at version 1.1.7 in 2011. Pillow is the maintained fork. How to install it, what...
- The PIL licence — The Python Imaging Library licence from Secret Labs and Fredrik Lundh, what it permits, and how it relates to the...
- Downloads — Where the old PythonWare downloads went, and how to install Pillow and the other libraries that came from this site...
- XML-RPC for Python — The PythonWare XML-RPC library became xmlrpc.client in Python 3. How to use it today, and what to know about security.
About this site
- Python imaging notes — Working notes and browser tools for the Python Imaging Library and its maintained fork Pillow, plus a modern Tkinter...
- About this site — What this domain was, who Fredrik Lundh was, and what is published here now.
- The daily archive — Where to find Fredrik Lundh's daily writing from pythonware.com and effbot.org, and what is published here in its place.
- The laboratory — What used to be at this address, and the small imaging experiments published here now.
Other files
Looking for something that used to be here
A lot of links to this domain are twenty years old. If a page you remember is missing, it was most likely part of Fredrik Lundh's original site, and the Internet Archive has it. The about page explains what happened to this domain, and the daily page covers his writing specifically.