为什么PIL mask让gif看起来像有滤镜一样?

问题描述 投票:0回答:0

减少了这个尖峰测试的原始问题。

from PIL import Image, ImageDraw

DIMENSIONS = (500, 500)
CENTER = (250, 250)
RADIUS = 225
CENTER_CIRCLE_RADIUS = 100

# mask
mask_img = Image.new('L', DIMENSIONS, color=0)
mask_draw = ImageDraw.Draw(mask_img)
mask_draw.ellipse((CENTER[0] - RADIUS, CENTER[1] - RADIUS, CENTER[0]
                   + RADIUS, CENTER[1] + RADIUS), fill=255)

# center circle mask
center_circle_mask_size = (CENTER_CIRCLE_RADIUS * 2, CENTER_CIRCLE_RADIUS * 2)
center_circle_mask_img = Image.new('L', center_circle_mask_size, color=0)
center_circle_mask_draw = ImageDraw.Draw(center_circle_mask_img)
center_circle_mask_draw.ellipse((0, 0) + center_circle_mask_size, fill=255)

center_circle_img = Image.open("images/joy.png")
spinner_img = Image.new('RGB', DIMENSIONS, color=(0, 0, 0))
spinner_img.putalpha(mask_img)
center_circle_img.putalpha(center_circle_mask_img)
spinner_img.paste(center_circle_img, (
    int((DIMENSIONS[0] - CENTER_CIRCLE_RADIUS * 2) / 2), int((DIMENSIONS[1] - CENTER_CIRCLE_RADIUS * 2) /
                                                             2)), center_circle_img)
spinner_img.save("spike_output.gif")

我意识到这行代码

spinner_img.putalpha(mask_img)
导致gif有滤镜效果

原图:

spinner_img.putalpha(mask_img)

没有

spinner_img.putalpha(mask_img)

如何保持后者的图像质量,同时使用蒙版裁剪背景?

python image python-imaging-library gif
© www.soinside.com 2019 - 2024. All rights reserved.