"charlie clark" wrote:

I would like to be able to mark areas on a map with round points. I already have the round points as a separate graphic with a transparent background. When I use Image.paste(im, (10, 10)) the paste works but the background of the pasted image is white rather than transparent. I think that I should be doing something with a mask but I don't quite understand how this works. Thanks for any tips.

to do a transparent paste, you need to pass in the mask (or matte) as the
third argument.

if you're pasting RGBA data into an RGB image, you can simply pass in the
overlay itself as the third argument:

image.paste(im, (10, 10), im)

Yes, I've tried this but it didn't make any difference.

if you're using P images, you have to create a mask first. something like this
might work:

lut = [1] * 256 lut[im.info["transparency"]] = 0

    mask = im.point(lut, "1")
    image.paste(im, (10, 10), mask)

Yes, it would when I understood it better! :-/

I'm working with .GIFs which as I understand it are P (palette) images. I had hoped that using convert("RGBA") would map the transparency to the alpha channel. But it didn't. I need to use RGB as otherwise the palettes of both images get mixed up.

I tried your example but got "images don't match" because I'd converted to RGBA abd im.point is expecting a Palette. Reloading and not converting the image and everything works fine. But I can't admit to understanding everything.

Trying to understand things: lut is effectively a palette table all set to the same value?
What does lut[im.info["transparency"]] = 0 do?
In my case its would sets lut[14] = 0
So the real magic is im.point() which creates a single band presumably reacting to the transparency in the original image.


Sorry for the really simple questions but even though I've now got this working, I like to understand how!

Thanks

Charlie
_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig

Reply via email to