Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python+;枕头+;Images2Gif-GIF帧的颜色不正确_Python_Python Imaging Library_Animated Gif_Pillow - Fatal编程技术网

Python+;枕头+;Images2Gif-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

我正在使用以下代码向动画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)
为了完成示例,我还提供了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'))