通过PIL实现两张照片加水印图片效果

本文介绍如何利用Python的PIL库为多张照片添加水印效果,包括设置水印位置、透明度和文字样式,实现批量处理图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值