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'为图片输入路径(文件夹),'./'为输出路径
写的可能不是最简形式的,如果大家有办法再精简,可以评论告诉我