Python + Pillow + Images2Gif - GIF帧的颜色不正确

时间:2015-07-21 07:50:10

标签: 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, (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)

为了完成示例,我还提供了辅助函数的代码:

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')

Source code of images2gif I 've used - 我对它进行了一些修改以使其与枕头配合使用。在源代码的开头看注释。

0 个答案:

没有答案