python给图片添加全屏水印(透明度/字体)

import os,math
from PIL import Image,ImageFont,ImageDraw,ImageEnhance,ImageOps

def gen_mark():
    # 生成mark图片,返回添加水印的函数,字体宽度、高度
    size10,mark10=50,'我是水印'
    # 创建水印图片(宽度、高度)
    mark=Image.new(mode='RGBA',size=(len(mark10)*size10,round(size10*1.2)))
    # 生成文字,透明度0.5(50%),#6e6e6e是水印的颜色
    # 'C:/Windows/Fonts/msyhbd'为微软雅黑的粗体
    ImageDraw.Draw(mark).text(xy=(0,0),text=mark10,fill='#6e6e6e',font=ImageFont.truetype('C:/Windows/Fonts/msyhbd',size10))
    mark.putalpha(ImageEnhance.Brightness(mark.split()[3]).enhance(float(0.5)))

    def mark_im(im):
        # 在im图片上添加水印 im为打开的原图,计算斜边长度
        c=int(math.sqrt(im.size[0]*im.size[0]+im.size[1]*im.size[1]))
        # 以斜边长度为宽高创建大图(旋转后大图才足以覆盖原图)
        mark2 = Image.new(mode='RGBA',size=(c,c))
        # 在大图上生成水印文字,此处mark为上面生成的水印图片
        y,idx,space10=0,0,75
        while y < c:
            # 制造x坐标错位
            x = -int((mark.size[0] + space10) * 0.5 * idx)
            idx = (idx + 1) % 2

            while x < c:
                # 在该位置粘贴mark水印图片
                mark2.paste(mark, (x, y))
                x = x + mark.size[0] + space10
            y = y + mark.size[1] + space10
        # 将大图旋转一定角度
        mark2 = mark2.rotate(30)
        # 在原图上添加大图水印
        im.paste(mark2,(int((im.size[0]-c)/2),int((im.size[1]-c)/2)),mark2.split()[3])
        del mark2
        return im
    return mark_im
for name in os.listdir('./ppppp'):gen_mark()(ImageOps.exif_transpose(Image.open(os.path.join('./ppppp',name)))).convert('RGB').save(os.path.join('./',os.path.basename(os.path.join('./ppppp',name))),quality=80)
# './ppppp'为图片输入路径(文件夹),'./'为输出路径

写的可能不是最简形式的,如果大家有办法再精简,可以评论告诉我

python
122 views
Comments
登录后评论
Sign In