Python+;枕头+;Images2Gif-GIF帧的颜色不正确
我正在使用以下代码向动画GIF图像添加水印。我的问题是,除了第一个之外,所有的GIF帧都有不正确的颜色。你知道如何调整镜框的颜色吗?多谢各位Python+;枕头+;Images2Gif-GIF帧的颜色不正确,python,python-imaging-library,animated-gif,pillow,Python,Python Imaging Library,Animated Gif,Pillow,我正在使用以下代码向动画GIF图像添加水印。我的问题是,除了第一个之外,所有的GIF帧都有不正确的颜色。你知道如何调整镜框的颜色吗?多谢各位 def add_watermark(in_file, watermark_file, watermark_position, watermark_ratio, out_file, quality=85): img = Image.open(in_file) watermark_layer = Image.new('RGBA', img.size
def add_watermark(in_file, watermark_file, watermark_position, watermark_ratio, out_file, quality=85):
img = Image.open(in_file)
watermark_layer = Image.new('RGBA', img.size, (0,0,0,0))
watermark_img = Image.open(watermark_file).convert('RGBA')
watermark_img.thumbnail((img.size[0]/watermark_ratio, 1000), Image.ANTIALIAS)
alpha = watermark_img.split()[3]
alpha = ImageEnhance.Brightness(alpha).enhance(0.95)
watermark_img.putalpha(alpha)
watermark_layer.paste(watermark_img, count_watermark_position(img, watermark_img, watermark_position))
frames = images2gif.readGifFromPIL(img, False)
frames_out = []
for frame in frames:
frames_out.append(Image.composite(watermark_layer, frame, watermark_layer))
images2gif.writeGif(out_file, frames_out, duration=0.5)
为了完成示例,我还提供了helper函数的代码:
def count_watermark_position(img, watermark, position):
if position == 'right_bottom':
return img.size[0] - watermark.size[0], img.size[1] - watermark.size[1]
if position == 'center':
return (img.size[0] - watermark.size[0])/2, (img.size[1] - watermark.size[1])/2
if position == 'left_bottom':
return 0, img.size[1] - watermark.size[1]
if position == 'left_top':
return 0, 0
if position == 'right_top':
return img.size[0] - watermark.size[0], 0
raise AttributeError('Invalid position')
-我对它做了一点修改,使它与枕头配合使用。请参阅源代码开头的注释 您能否提供
count\u watermark\u position()
?我不熟悉images2gif
,但如果您将合成图像转换为“RGB”或“p”模式,会有什么不同吗?@adrianus我在问题中添加了函数代码。@snakey谢谢。您从哪里获得images2gif.readGifFromPIL()
,或者您使用的是什么版本的images2gif
?我下载了最新的,但是里面没有这样的方法。我让它使用readGif()
但是…@snakey:我不是建议你转换输入数据。但我怀疑,如果在将合成图像传递到images2gif.writeGif
之前对其进行转换,可能会有所不同。例如frames\u out.append(Image.composite(水印层、帧、水印层).convert(mode='RGB'))