from PIL import ImageFont,Image,ImageDraw,ImageSequence
import os
def changetransparency(img):
img = img.convert("RGBA")
x, y = img.size # 获得长和宽
# 设置每个像素点颜色的透明度
for i in range(x):
for k in range(y):
color = img.getpixel((i, k))
# print("color is"+str(color))
# pdb.set_trace()
color = color[:-1] + (150,)
img.putpixel((i, k), color)
# img.show()
return img
def get_dirs_name(in_dir,out_dirs):
in_d = []
out_d =[]
for filename in os.listdir(in_dir):
in_d.append(in_dir+filename)
out_d.append(out_dirs+filename)
return in_d,out_d
def watermark_on_gif(in_gif, out_gif,mask, text='scratch8'):
"""本函数给gif动图加水印"""
frames = []
# myfont = ImageFont.truetype("msyh.ttf", 12) # 加载字体对象
im = Image.open(in_gif) # 打开gif图形
im_width, im_hight = im.size
# water_im = Image.new("RGBA", im.size) # 新建RGBA模式的水印图
# draw = ImageDraw.Draw(water_im) # 新建绘画层
# draw.text((10, 10), text, font=myfont, fill='red')
mask_img = Image.open(mask)
mask_width,mask_height =mask_img.size
# 得到mask图的大小
width = im_width//4
beishu = mask_width //width
mask_width = mask_width//beishu
mask_height = mask_height//beishu
mask_img = mask_img.resize((mask_width,mask_height))
mask_img = changetransparency(mask_img)
# 得到位置
x = int(im_width - 1.2* mask_width)
y = int(im_hight - 1.2 * mask_height)
# pdb.set_trace()
# mask_img.show()
for frame in ImageSequence.Iterator(im): # 迭代每一帧
frame = frame.convert("RGBA") # 转换成RGBA模式
frame.paste(mask_img,(x,y),mask_img) # 把水印粘贴到frame
frames.append(frame) # 加到列表中
newgif = frames[0] # 第一帧
# quality参数为质量,duration为每幅图像播放的毫秒时间
newgif.save(out_gif, save_all=True, append_images=frames[1:], quality=85, duration=100)
im.close()
if __name__ == '__main__':
in_dirs,out_dirs = get_dirs_name("D:\\005-code\\python\\source\\","D:\\005-code\\python\\out\\")
mask = r"test.jpg"
for i in range(len(in_dirs)):
in_gif= in_dirs[i]
out_gif = out_dirs[i].split(".")[0]+".gif"
text = "DTB"
watermark_on_gif(in_gif,out_gif,mask)