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

import glob,os,math
from PIL import Image,ImageFont,ImageDraw,ImageEnhance,ImageOps
def gen(im):
    mark=Image.new('RGBA',(len('我是水印')*50,round(50*1.2))) #生成文字,透明度
    ImageDraw.Draw(mark).text((0,0),'我是水印','#6e6e6e',ImageFont.truetype('C:/Windows/Fonts/msyhbd',50))
    mark.putalpha(ImageEnhance.Brightness(mark.split()[3]).enhance(0.5))
    c=int(math.sqrt(im.size[0]**2+im.size[1]**2)) #以斜边长度为宽高创建大图(旋转后大图才足以覆盖原图)
    y,idx,mark2=0,0,Image.new('RGBA',(c,c))
    while y<c: #制造x坐标错位
        x,idx=-int((mark.size[0]+75)*0.5*idx),(idx+1)%2
        while x<c: #在该位置粘贴mark水印图片
            mark2.paste(mark,(x,y))
            x=x+mark.size[0]+75
        y=y+mark.size[1]+75 #将大图旋转一定角度,并在原图上添加大图水印
    im.paste(mark2.rotate(30),(int((im.size[0]-c)/2),int((im.size[1]-c)/2)),mark2.rotate(30))
    return im
for n in glob.glob('./ppppp/*'):gen(ImageOps.exif_transpose(Image.open(n))).save('.\\'+os.path.basename(n)),os.remove(n)

上一个版本的新改进版,精简到了17行,如果还有办法精简,评论告诉我(应该不可能了)

python
140 views
Comments
登录后评论
Sign In
·

行数没啥意义,你这不符合pep,还能少好几行