W. eWatson wrote: > Basically, I'd like to know how one (broadly, e.g., references in Win-land) > does IP (image processing) and drawing techniques such as rubber lines, and > dragging image objects across the canvas. I know there are some pretty > powerful toolkits out there, but I'd like to limit this to PIL and Tkinter. > If it can't be done with them, then I'll consider other possibilities. As a > starter, on the topic of transparencies, consider this program that I pulled > off the web and was posted in 1999. It purports to illustrate how one might > produce a transparency.
OK, maybe I'm dumb but: > #!/usr/bin/python > # see http://mail.python.org/pipermail/python-list/1999-May/003388.html > from Tkinter import * > import Image, ImageTk > import tkFileDialog > > class Transparency: > def __init__(self, parent): > self.canvas = Canvas(parent, bg='green') > self.canvas.pack() > b = Button(parent, command=self.open, text="Select graphics file") > b.pack() > > def open(self): > self.canvas.delete(ALL) > filename = tkFileDialog.askopenfilename() > if filename != '': > im = Image.open(filename) > if im.mode != "RGBA": > im = Image.open(filename).convert("RGBA") > source = im.split() > R, G, B, A = 0, 1, 2, 3 > mask = im.point(lambda i: i > 0 and 255) # use black as transparent ^^^^^^^^^^^^^^^^^^^^^^^^ > source[A].paste(mask) > im = Image.merge(im.mode, source) # build a new multiband image > > self.graphic = ImageTk.PhotoImage(image=im) > self.canvas.create_image(100, 100, image=self.graphic) > if __name__ == "__main__": > root = Tk() > test = Transparency(root) > root.mainloop() > > It colors the canvas green, and produces a black background. An image is > merged with the background. I tried out the program. It executes, but I > do not see where the transparency is apparent. I used a gif with a > picture of a telescope on a white background, and the result is what I ^^^^^^^^^^^^^^^^ > would see if I pasted the telescope and white background onto the green > canvas. I have neither PIL, nor the image you're using so I can just guess. But if you want to use a white background, maybe you should use a mask defined with: mask = im.point(lambda i: 255 if i >= 255 else 0) (if I understood the mask construction correctly...). HTH - Eric - -- http://mail.python.org/mailman/listinfo/python-list