本文分享一个python批量为图片添加文字水印的方法,用到的库为pillow。
如果没有,请先下载:
pip install pillow
用到里面的三个类:
from PIL import Image,ImageDraw,ImageFont
同时需要一些文件处理,所以还需要这两个库:
import os,shutil
该程序的主要逻辑是:
- 获取目标目录内的所有png图片(可自行更改)
- 将所有图片进行备份,复制到目标文件夹下的back文件夹中
- 然后调用Pillow库,对图片进行处理
源码:
from PIL import Image,ImageDraw,ImageFont
import os,shutil
path=input("要添加水印的图片路径:")
#构建备份文件夹
back=os.path.join(path,"back")
if not os.path.exists(back):
os.mkdir(back)
#构建目标文件夹下所有图片的绝对路径
ls=[] #存放图片路径
for png in os.listdir(path):
f=os.path.join(path,png)
if not f.endswith(".png"): #只操作png图片
continue
ls.append(f)
shutil.copyfile(f,os.path.join(back,png))
print("正在备份图片:",f)
print("共备份图片:",len(ls))
print("开始添加水印……")
for f in ls:
print("正在处理:",f)
im=Image.open(f)
draw=ImageDraw.Draw(im)
text="www.ityushi.cn"
font=ImageFont.truetype("arial.ttf",28)
fsi=font.getbbox("www.ityushi.cn")
draw.text((im.size[0]-fsi[2],im.size[1]-fsi[3]),text=text,font=font,fill=255)
im.save(f)
print("共处理:{}张图片".format(len(ls)))
图片处理流程为:
Image.open
:打开目标图像文件,返回图像对象ImageDraw.Draw
:通过上一个函数返回的图像对象,构建绘图对象ImageFont.truetype
:构建字体对象,第一个参数为字体文件,第二个参数为字体大小font.getbbox
:返回目标文字的大小,为4个元素的元组,由于左上角为原点,所以第三个参数为字体的宽,第4个参数为字体的高draw.text
:开始在图像上写文字,其参数分别为:(x,y)元组坐标,文本,字体,颜色