使用 Python PIL 库将 GIF 放在 PNG 前面
Place GIF in front of a PNG with Python PIL library
我正在尝试使用 Python 3 和 PIL
库将 PNG 文件与 GIF 文件合并。
我想将 PNG 文件放在背景中,而 foreground.I 中的 GIF 文件可以做相反的事情,将 GIF 文件放在背景中,将 PNG 文件放在前景中。感谢在这里回答的人:
然而,当我尝试做我需要的事情时,我只得到透明的 GIF 而没有图像背景上的 PNG。
我用这个透明 GIF:https://i.imgur.com/wOolptS.gif
我使用这个 PNG:https://i.imgur.com/kfnQGYP.png
我得到这个输出:https://i.imgur.com/rtWYKVn.gif
我的代码:
from PIL import Image
foreground = Image.open('image.gif')
background = Image.open('image.png').convert("RGBA")
img_w, img_h = background.size
foreground_w, foreground_w = foreground.size
if foreground.is_animated:
frames = []
for num in range(foreground.n_frames):
foreground.seek(num)
layer = Image.new('RGBA', (foreground_w, foreground_w), (0, 0, 0, 0)).resize((img_w, img_h))
layer.paste(background, (0,0), mask=background)
layer.paste(foreground.resize((img_w, img_h)), (0,0))
frames.append(layer)
frames[0].save('1.gif',
save_all=True,
append_images=frames[1:],
duration=100,loop=0)
即使您将其称为“透明 GIF”,但其中没有一个透明像素。调色板包含 16 种颜色,但每个帧的 99.99% 由前 2 个调色板条目组成。前 3 帧使用 4 种颜色,第 4 帧使用 6 种颜色。
如果 GIF 包含适当的透明度,一个简单的 over = foreground.convert('RGBA')
将为您提供具有 alpha 透明度的图像。
我正在尝试使用 Python 3 和 PIL
库将 PNG 文件与 GIF 文件合并。
我想将 PNG 文件放在背景中,而 foreground.I 中的 GIF 文件可以做相反的事情,将 GIF 文件放在背景中,将 PNG 文件放在前景中。感谢在这里回答的人:
我用这个透明 GIF:https://i.imgur.com/wOolptS.gif
我使用这个 PNG:https://i.imgur.com/kfnQGYP.png
我得到这个输出:https://i.imgur.com/rtWYKVn.gif
我的代码:
from PIL import Image
foreground = Image.open('image.gif')
background = Image.open('image.png').convert("RGBA")
img_w, img_h = background.size
foreground_w, foreground_w = foreground.size
if foreground.is_animated:
frames = []
for num in range(foreground.n_frames):
foreground.seek(num)
layer = Image.new('RGBA', (foreground_w, foreground_w), (0, 0, 0, 0)).resize((img_w, img_h))
layer.paste(background, (0,0), mask=background)
layer.paste(foreground.resize((img_w, img_h)), (0,0))
frames.append(layer)
frames[0].save('1.gif',
save_all=True,
append_images=frames[1:],
duration=100,loop=0)
即使您将其称为“透明 GIF”,但其中没有一个透明像素。调色板包含 16 种颜色,但每个帧的 99.99% 由前 2 个调色板条目组成。前 3 帧使用 4 种颜色,第 4 帧使用 6 种颜色。
如果 GIF 包含适当的透明度,一个简单的 over = foreground.convert('RGBA')
将为您提供具有 alpha 透明度的图像。