python给图片批量添加水印filestools模块

又很多添加水印的方法,如opencv模块、PIL模块但是感觉都较为复杂,filestools模块其本质上也是对ImageDraw.Draw.text()方法做了进一步的封装,让我们用起来更加的简便。

filestools模块

/usr/local/bin/pip3 install filestools -i https://pypi.douban.com/simple/ # 安装

我们使用add_mark()方法可以生成数量较多的水印,该方法有8个参数,比较重要的有

  • mark:水印的内容
  • 水印样式包括color、size、opacity、space、angle:颜色、大小、不透明度、空间、角度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
from watermarker.marker import add_mark # 添加水印模块

def update_img(dir,water_name):
try:
if not dir and water_name:
print("文件夹地址或水印名称不能为空")
return
for img_name in os.listdir(dir):
add_mark(file=os.path.join(dir,img_name), out=os.getcwd(), mark=water_name, opacity=0.3, angle=30, space=70, size=30)
except FileNotFoundError and NotADirectoryError:
print("文件夹地址不正确")
return
if __name__ in '__main__':
update_img(dir="图片地址",water_name="水印名字")
1
2
3
4
5
6
7
8
9
函数名称:add_mark,用于实现添加水印。
file:原始照片;
mark:使用哪些字符作为水印;
out:添加水印后保存的位置;
color:水印字体的颜色,默认颜色#8B8B1B;
size:水印字体的大小,默认50;
opacity:水印字体的透明度,默认0.15;
space:水印字体之间的间隔, 默认75个空格;
angle:水印字体的旋转角度,默认30度;

全局搜索并附加水印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os,shutil,glob
from watermarker.marker import add_mark # 添加水印模块

def update_img(dir,water_name):

if not dir and water_name:
print("文件夹地址或水印名称不能为空")
return
for img_name_dir in dir: # 此时dir是个一个可编历对象
add_mark(file=img_name_dir, out=os.getcwd(), mark=water_name, opacity=0.3, angle=30, space=70, size=30)
img_name=str(img_name_dir).split("/")[-1]
shutil.move(img_name,img_name_dir)
print(img_name_dir,img_name)



if __name__ in '__main__':
for key in ['webp','png','jpg','jpeg']: # 对关键字
#获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。glob.iglob与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。
image_list=glob.iglob(f"/Users/jerry/source/**/*.{key}",recursive=True)
update_img(dir=image_list,water_name="jerryWang")