Loading... # python实现为图片批量添加水印 参考: [使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢! - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/382158515) [ python通过对话框实现文件或文件夹路径的选择并获得路径_请选择的博客-CSDN博客_python选择文件夹或文件](https://blog.csdn.net/weixin_42267761/article/details/90443609) [[python\] OSError: cannot write mode RGBA as JPEG - 黄天星 - 博客园 (cnblogs.com)](https://www.cnblogs.com/huangtianxing/p/13292990.html) 需求: 课程报告截图得带信息水印,因为觉得截图时添加文字麻烦,下载图片处理软件占空间,在线处理老付费,索性写个脚本 魔改: 结合tkinter可以直接调出文件选择框,通过计算输入文字和图片大小,大致确定合适添加水印位置 可以修改fnt里的字体:调用C:\Program Files\Microsoft Office\root\vfs\Fonts\private下的文件即可 可以修改d.text中fill水印颜色:在线调色网址[ColorSpace - Color Palettes Generator and Color Gradient Tool (mycolor.space)](https://mycolor.space/) ~~~python from PIL import Image, ImageDraw, ImageFont import tkinter as tk from tkinter import filedialog import numpy as np import time def create_watermark(): print('请选择要添加水印的图片:') time.sleep(1) files_path = get_files_path() if files_path is None: return else: for i in files_path: print(i) text = input('请输入要添加的水印文字:') for i in files_path: img = Image.open(i) # 获取图片大小以计算水印大致位置 arr_img = np.asarray(img) x, y = arr_img.shape[1], arr_img.shape[0] # 长和宽 fnt_size = round(x / 2 / len(text)) # 文字大小 if fnt_size < 20: fnt_size = 20 txt_x = x / 2 - fnt_size * len(text) / 2 # 文字开始的x坐标 txt_y = y / 2 - fnt_size / 2 # 文字开始的y坐标 # 开始添加水印 with img.convert("RGBA") as base: # 必须先转换成RGBA才能出现色彩 txt = Image.new("RGBA", base.size, (255, 255, 255, 0)) fnt = ImageFont.truetype("SIMLI.TTF", fnt_size) d = ImageDraw.Draw(txt) d.text((txt_x, txt_y), text, font=fnt, fill=(249, 12, 31)) new = Image.alpha_composite(base, txt) # 将水印和原图片合成 new.save(i) print('添加水印完成!') # 获取图片路径 def get_files_path(): root = tk.Tk() root.withdraw() filepath = filedialog.askopenfilenames() return filepath def run(): create_watermark() if __name__ == '__main__': run() ~~~ 效果: ![image-20220225175801515.png](http://xherlock.top/usr/uploads/2022/02/1171524183.png) ![image-20220225175832342.png](http://xherlock.top/usr/uploads/2022/02/3978051359.png) 很可惜没能实现倾斜文字水印,就是常见的pdf里那种,因为如果采用PIL下rotate函数会导致文字偏移很难计算具体位置,索性就这样了,能够基本满足我做课程报告为截图批量添加水印的需求就好! 最后修改:2022 年 02 月 25 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏