[Image-SIG] I'm trying to use the Python Imaging Library to draw transparent GIFs onto a TKinter canvas.

Eric Ford ericford at comcast.net
Mon Jun 7 14:07:24 EDT 2004


I'm trying to use the Python Imaging Library to draw transparent GIFs onto 
a TKinter canvas.

Following is some sample code I found, but I'm wondering if there's 
anything better out there.

The image is first split into red green blue and alpha (opacity) channels, 
then a function is applied to each of the RGB layers which results in a 
mask.

Here is the code fragment that accomplishes this:

source = im.split()                 # split the image into layers
R, G, B, A = 0, 1, 2, 3             # for readability
mask = im.point(lambda i: i < 255)  # kluge
source[A].paste(mask)               # put mask into the alpha channel
im = Image.merge(im.mode, source)   # build a new multiband image
self.graphic = ImageTk.PhotoImage(image=im) # for eventual retrieval

The kluge here is that the point method applies its function to each 
layer, so instead of inputting a 24 bit color as the transparent color, we 
only get to specify an 8 bit value.  Any pixel having a value of 255 in 
one of the layers will be treated as transparent.  This happens to work 
fine with the current color choices in the GIF files,  but a real solution 
needs to be found.



More information about the Image-SIG mailing list