Using Transparent Gif/png With Image's Blitting
Join the DZone community and get the full member experience.Join For Free
pys60's Image class will load a transparent gif/png just like a non-transparent one. But its blit() method accept a mask paramenter. I have talked about this in a previous snippet. The missing link is to create a mask automatically from the Image. It's typically the top-left pixel. You can use Image's getpixel() which is undocumented. I show typical use of getpixel here. Combine them all, here's the automask function.
def automask(im): width, height = im.size mask = Image.new(im.size, '1') # black and white tran = im.getpixel((0,0)) # transparent top-left for y in range(height): line = im.getpixel([(x, y) for x in range(width)]) for x in range(width): if line[x] == tran: mask.point((x,y), 0) # mask on the point return maskAn example usage
from graphics import Image ship = Image.open('E:\\Images\\ship.gif') mask = automask(ship) canvas.blit(ship, mask=mask) # don't forget to create canvas firstA Sprite class can be defined based on this too.
Opinions expressed by DZone contributors are their own.