from PIL import Image
from PIL import ImageFilter
import os
for filename in os.listdir("."): # parse through file list in the current directory
if filename[-3:] == "png":
img = Image.open(filename)
img = img.convert("RGBA")
pixdata = img.load()
for y in xrange(img.size[1]):
for x in xrange(img.size[0]):
r, g, b, a = img.getpixel((x, y))
if (r < 130) and (g < 60) and (b < 60):
pixdata[x, y] = (255, 255, 255, 0)
#Remove anti-aliasing outline of body.
if r == 0 and g == 0 and b == 0:
pixdata[x, y] = (255, 255, 255, 0)
img2 = img.filter(ImageFilter.GaussianBlur(radius=1))
img2.save(filename, "PNG")
The basic idea is to load each frame of the animation, loop through each pixel of each frame, and remove the color of the "green screen" background color, including a small range to account for the semi-transparent pixels on the edge of the rendered object that are mixed with the green screen. Finally, a small blurring filter is added to soften the edges of the image, otherwise at the edge where the green screen is removed, it looks more obvious that it was "cut out". As a final touch, after creating the sprite sheet you can use a program like GIMP to add some additional filters to adjust the color and contrast. You can also use GIMP to get the exact RGBA numbers to specify which color to filter out in your program.
No comments:
Post a Comment