首页 > 解决方案 > 将非透明图像转换为透明 GIF 图像 PIL

问题描述

如何使用 PIL 将不透明的 PNG 文件转换为透明的 GIF 文件?

我的海龟图形游戏需要它。我似乎只能透明化 PNG 文件,而不是 GIF 文件。

标签: pythonimagepython-imaging-librarytransparency

解决方案


至少对我来说,这并不明显,你应该如何做到这一点!对于不存在的问题,这可能是不必要的解决方法,因为我不知道 PIL 内部如何工作。

无论如何,我使用这个输入图像搞砸了足够长的时间:

在此处输入图像描述

#!/usr/bin/env python3

from PIL import Image, ImageDraw, ImageOps

# Open PNG image and ensure no alpha channel
im = Image.open('start.png').convert('RGB')

# Draw alpha layer - black square with white circle
alpha = Image.new('L', (100,100), 0)
ImageDraw.Draw(alpha).ellipse((10,10,90,90), fill=255)

# Add our lovely new alpha layer to image
im.putalpha(alpha)

# Save result as PNG and GIF
im.save('result.png')
im.save('unhappy.gif')

当我到达这里时,PNG 可以正常工作,而 GIF 则“不开心”

下图PNG:

在此处输入图像描述

下面是“不开心”的 GIF:

在此处输入图像描述

这是我修复GIF的方法:

# Extract the alpha channel
alpha = im.split()[3]

# Palettize original image leaving last colour free for transparency index
im = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=255)

# Put 255 everywhere in image where we want transparency
im.paste(255, ImageOps.invert(alpha))
im.save('result.gif', transparency=255)

在此处输入图像描述

关键词:Python、图像处理、PIL、Pillow、GIF、透明度、alpha、保留、透明索引。


推荐阅读