[Image-SIG] I'm confused by alpha blending.
Fredrik Lundh
fredrik at pythonware.com
Tue Mar 21 23:12:54 CET 2006
Ned Batchelder wrote:
> I'm using PIL to composite a drop shadow onto an image. The blending
> isn't working the way I would expect. The drop shadow image itself has
> all black pixels, with all of the interesting stuff happening in the
> alpha channel. I'm using Image.paste to draw the drop shadow, by
> specifying the shadow png as both the image and the mask.
>
> When I do this on a pure black image, the shadow lightens the pixels!
> For example, a black existing pixel gets a shadow pixel that is black
> with alpha value of 152 decimal. The result should be black (since both
> the source and the destination are black, how can the alpha channel
> lighten the pixel?), but it comes out with a value of 100 decimal.
>
> When I graph the background color against the resulting color (using a
> fixed black shadow pixel with 152 alpha), the result is linear, but as I
> say, it lightens black pixels inexplicably.
>
> Is there something I am doing wrong?
sounds confusing, indeed.
are you 100% sure that the source pixels are black ?
what happens if you do paste("black", shadow) on a black image ?
what happens on your machine if you do:
>>> from PIL import Image
>>> Image.VERSION
'1.1.5'
>>> bg = Image.new("RGB", (100, 100), "black")
>>> bg.getcolors()
[(10000, (0, 0, 0))]
>>> shadow = Image.new("RGB", (100, 100), 0)
>>> alpha = Image.new("L", (100, 100), None)
>>> alpha.putdata(range(0,200,2)*100)
>>> shadow.putalpha(alpha)
>>> shadow.mode
'RGBA'
>>> len(shadow.getcolors())
100
>>> bg.paste(shadow, shadow)
>>> bg.getcolors()
[(10000, (0, 0, 0))]
</F>
More information about the Image-SIG
mailing list