使用PIL将PNG32转换为PNG8,同时保持透明度

mon*_*ero 7 python png python-imaging-library

我想用Python图像库将PNG32图像(透明度)转换为PNG8.到目前为止,我已成功转换为具有扎实背景的PNG8.

以下是我正在做的事情:

from PIL import Image
im = Image.open("logo_256.png")
im = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=255)
im.save("logo_py.png", colors=255)
Run Code Online (Sandbox Code Playgroud)

mon*_*ero 14

经过网上搜索,这里是完成我要求的代码:

from PIL import Image

im = Image.open("logo_256.png")

# PIL complains if you don't load explicitly
im.load()

# Get the alpha band
alpha = im.split()[-1]

im = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=255)

# Set all pixel values below 128 to 255,
# and the rest to 0
mask = Image.eval(alpha, lambda a: 255 if a <=128 else 0)

# Paste the color of index 255 and use alpha as a mask
im.paste(255, mask)

# The transparency index is 255
im.save("logo_py.png", transparency=255)
Run Code Online (Sandbox Code Playgroud)

来源:http: //nadiana.com/pil-tips-converting-png-gif虽然那里的代码没有调用im.load(),因而在我的os/python/pil版本上崩溃了.(看起来这是PIL中的错误).