当前位置:首页>python>批量给图片添加水印,20行Python代码就能一步到位,就是这么简单

批量给图片添加水印,20行Python代码就能一步到位,就是这么简单

  • 2026-09-18 17:02:00
批量给图片添加水印,20行Python代码就能一步到位,就是这么简单
在日常工作中,经常需要给图片添加水印,手动添加不仅费时间,而且还很难做到格式统一、位置一致。
前几天就遇到朋友询问,说需要对大量图片截图,为了防止外泄,需要给每张照片添加水印,手动操作需要很长时间,问有没有高效的方法。
对于这种重复性的工作,Python正是它的长项,只需要20行代码就能轻松搞定,眨眨眼的工夫就能完成原本几个小时的活儿。
先上代码:
from pathlib import Pathfrom PIL import Image, ImageDraw, ImageFontfolder = Path(r"C:\Users\Administrator\Desktop\加水印")  # 图片文件夹路径text = "数海话表图"  # 水印文字color = (255, 182, 193, 128)  # 浅红色(RGBA,最后一位是透明度)angle = 45  # 倾斜角度font_size = 80  # 字体大小font = ImageFont.truetype("simhei.ttf", font_size)for file in folder.glob("*.[jp][pn]g"):    file_new = file.with_stem(f"{file.stem}_加水印")    img = Image.open(file).convert("RGBA")    watermark = Image.new("RGBA", img.size, (255, 255, 255, 0))    draw = ImageDraw.Draw(watermark)    bbox = draw.textbbox((0,0),text,font=font)    w,h = bbox[2] - bbox[0] ,bbox[3] - bbox[1]    draw.text(((img.width - w) / 2, (img.height - h) / 2), text, font=font, fill=color)    watermark = watermark.rotate(angle, expand=0, fillcolor=(255, 255, 255, 0))    final = Image.alpha_composite(img, watermark).convert("RGB")    final.save(file_new, quality=95)    print(f"处理完成:{file}")
再来看代码解析。
第一步,导入所需库
from pathlib import Pathfrom PIL import Image, ImageDraw, ImageFont
pathlib用来处理文件和文件夹的路径,能轻松定位文件和文件夹。
PIL用来处理图片,Image负责图片的打开和保存,ImageDraw用来绘制文字和图形,ImageFont用来设置字体等。
第二步、设置水印的内容和参数。
folder = Path(r"C:\Users\Administrator\Desktop\加水印")  # 图片文件夹路径text = "数海话表图"  # 水印文字color = (255, 182, 193, 128)  # 浅红色(RGBA,最后一位是透明度)angle = 45  # 倾斜角度font_size = 80  # 字体大小font = ImageFont.truetype("simhei.ttf", font_size)
Path(r"C:\Users\Administrator\Desktop\加水印")是保存图片的文件夹。注意前面加r是避免路径里的反斜杠被转义引发问题。
text = "数海话表图":设置要添加的文字。

color = (255, 182, 193, 128) :设置字体颜色和透明度,前三个数字是字体颜色设置,依次为红、绿、蓝,第四个数字为透明度,数值区间均为0-255。

angle = 45:水印的旋转角度,可根据实际来设置。

font_size = 80:文字的字号大小。 

ImageFont.truetype("simhei.ttf", font_size):加载字体,simhei.ttf是常见的中文字体文件——黑体。

第三步、遍历并处理每张图片

for file in folder.glob("*.[jp][pn]g"):    file_new = file.with_stem(f"{file.stem}_加水印")    img = Image.open(file).convert("RGBA")    watermark = Image.new("RGBA", img.size, (255, 255, 255, 0))    draw = ImageDraw.Draw(watermark)    bbox = draw.textbbox((0,0),text,font=font)    w,h = bbox[2] - bbox[0] ,bbox[3] - bbox[1]    draw.text(((img.width - w) / 2, (img.height - h) / 2), text, font=font, fill=color)    watermark = watermark.rotate(angle, expand=0, fillcolor=(255, 255, 255, 0))    final = Image.alpha_composite(img, watermark).convert("RGB")    final.save(file_new, quality=95)    print(f"处理完成:{file}")

for file in folder.glob("*.[jp][pn]g")会筛选出所有后缀名为jpg、png的图片。

file_new = file.with_stem(f"{file.stem}_加水印"):新的文件名。with_stem会修改文章主名,file.stem会获取文件的主名,避免覆盖原图。

img = Image.open(file).convert("RGBA"):使用.open()打开图片,然后用.convert()把图片转化为RGBA格式。RGBA格式支持透明度调整,避免水印文字影响图片美观。

watermark = Image.new("RGBA", img.size, (255, 255, 255, 0)):创建一个和原图一样大小的透明画布,(255, 255, 255, 0)表示白色完全透明。

draw = ImageDraw.Draw(watermark):创建一个画笔。

bbox = draw.textbbox((0,0),text,font=font):计算出文字框的坐标位置。

w,h = bbox[2] - bbox[0] ,bbox[3] - bbox[1]:文字的宽度和高度。

(img.width - w) / 2:原图宽度减去文字宽度再除以2,就是文字水平居中的横坐标。

(img.height - h) / 2):文字垂直居中的纵坐标。

draw.text():在指定位置绘制水印文字, fill=color设置文字颜色和透明度。

watermark.rotate(angle):把水印画布旋转指定角度,expand=0表示旋转后画布的原来一样大,fillcolor设置旋转后空白处为透明。

Image.alpha_composite(img, watermark):合并原图和水印画布。

.convert("RGB"):转回RGB格式。

final.save(file_new, quality=95):保存新图片,quality=95表示保存图片的质量。

运行代码后,效果如下图所示:

怎么样,是不是很方便,你只需要对文件夹路径和水印文字相关内容进行设置,就能批量添加水印。下面是窗体化的运行小程序,你只需点点鼠标就能轻松搞定。

是不是比PS这些专业软件更简单?想“偷懒”的不妨学习一下吧。

最新文章

随机文章