Adding a transparent circle to an image on python with PIL

こ雲淡風輕ζ 提交于 2020-01-11 12:04:14

问题


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


回答1:


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')




回答2:


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



来源:https://stackoverflow.com/questions/16276609/adding-a-transparent-circle-to-an-image-on-python-with-pil

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!