3

I have a python program that craetes a png file with a circle on it. Now I want this circle to be semi transparent, given an alpha value.

Here is what I do:

img_map = Image.new(some arguments here)
tile = Image.open('tile.png')
img_map.paste(tile, (x,y))
canvas = ImageDraw.Draw(img_map)

# Now I draw the circle:
canvas.ellipse((p_x - 5, p_y - 5, p_x + 5, p_y + 5), fill=(255, 128, 10))

# now save and close
del canvas
img_map.save(path_out + file_name, 'PNG')

how can I make the ellipse semi transparent?

Thanks

otmezger
  • 9,027
  • 17
  • 55
  • 84

2 Answers2

3

Instead of a 3-tuple RGB value, (255, 128, 10), pass a 4-tuple RGBA value:

canvas.ellipse((p_x - 5, p_y - 5, p_x + 5, p_y + 5), 
               fill=(255, 128, 10, 50))

For example,

import Image
import ImageDraw

img = Image.new('RGBA', size = (100, 100), color = (128, 128, 128, 255))
canvas = ImageDraw.Draw(img)

# Now I draw the circle:
p_x, p_y = 50, 50
canvas.ellipse((p_x - 5, p_y - 5, p_x + 5, p_y + 5), fill=(255, 128, 10, 50))

# now save and close
del canvas
img.save('/tmp/test.png', 'PNG')

enter image description here

unutbu
  • 711,858
  • 148
  • 1,594
  • 1,547
  • Hi, I tried this (used `RGBA` in the creation of the img and 4 items in the RGBA and the result was not really good. The color of the circle is not totally strong anymore, but it won't mix with the map under it.... look here: http://i.imgur.com/d2b92Kv.png – otmezger Apr 29 '13 at 10:57
  • You might want to try Kris Kowal's solution [here](http://stackoverflow.com/a/3376602/190597), or the perhaps the alpha composite function (from my post on the same page). – unutbu Apr 29 '13 at 11:13
0

I used Image.composite(background, foreground, mask) to mask a semi transparent circle on a foreground.

I followed the instructions from here: Merging background with transparent image in PIL

Thanks to @gareth-res

Community
  • 1
  • 1
otmezger
  • 9,027
  • 17
  • 55
  • 84