前言
最近写的文章有大量的图片,就想着加个水印,在百度搜代码时发现下面的ai对话可以生成代码…..
原图
加水印后
部分代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| for filename in os.listdir(input_dir): if filename.lower().endswith(('.png', '.jpg', '.webp')): image_path = os.path.join(input_dir, filename) image = Image.open(image_path) width, height = image.size
text_bbox = ImageDraw.Draw(image).textbbox((0, 0), text, font=font) text_x = width - text_bbox[2] - x text_y = height - text_bbox[3] - y
draw = ImageDraw.Draw(image) draw.text((text_x, text_y), text, font=font, fill=font_color)
output_path = os.path.join(output_dir, filename) image = image.convert('RGB') image.save(output_path)
print(f"{output_path}")
print('批量处理完成!')
|
ini文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ini_file_path = 'user.ini'
config = configparser.ConfigParser() config.read(ini_file_path)
font_path = config['diy']['path'] font_size = int(config['diy']['size']) text = config['diy']['text'] font_color = tuple(map(int, config['diy']['color'].split(',')))
input_dir = config['directories']['input'] output_dir = config['directories']['out']
x = int(config['xy']['x']) y = int(config['xy']['y'])
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| [diy] path = STXINGKA.TTF size= 36 text = @Reverse color = 0,255,255
[directories] input = ./input out = ./out
[xy] x = 50 y = 50
|
1 2 3 4 5 6 7 8 9
| # ini备注 path 水印字体路径 size 水印字体大小 text 水印字体 color 水印字体颜色(RGB) input 将要处理的文件路径 out 处理后的文件路径 x 水印位置x y 水印位置y
|
CMD
1 2 3 4 5
| rd /s /q .\out
rd /s /q .\input
mkdir input
|
先删除 out
和 input
文件夹,再生成 input
文件夹
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
from PIL import Image, ImageDraw, ImageFont import os import configparser
ini_file_path = 'user.ini'
config = configparser.ConfigParser() config.read(ini_file_path)
font_path = config['diy']['path'] font_size = int(config['diy']['size']) text = config['diy']['text'] font_color = tuple(map(int, config['diy']['color'].split(',')))
input_dir = config['directories']['input'] output_dir = config['directories']['out']
x = int(config['xy']['x']) y = int(config['xy']['y'])
font = ImageFont.truetype(font_path, size=font_size)
if not os.path.exists(output_dir): os.makedirs(output_dir)
for filename in os.listdir(input_dir): if filename.lower().endswith(('.png', '.jpg', '.webp')): image_path = os.path.join(input_dir, filename) image = Image.open(image_path) width, height = image.size
text_bbox = ImageDraw.Draw(image).textbbox((0, 0), text, font=font) text_x = width - text_bbox[2] - x text_y = height - text_bbox[3] - y
draw = ImageDraw.Draw(image) draw.text((text_x, text_y), text, font=font, fill=font_color)
output_path = os.path.join(output_dir, filename) image = image.convert('RGB') image.save(output_path)
print(f"{output_path}")
print('批量处理完成!')
|
使用教程(打包整理后文件)
打开 user.ini
,里面的配置可自行修改
把将要处理的图片全部放到 input
文件夹中
双击运行 main.exe
等待窗口运行
处理后的图片在 out
中
双击 删除.bat
(这个用于快速清理 input
和 out
的文件)
注意事项
图片支持 png,jpg,webp格式图片,如需要添加其他图片格式可自行修改源码
如果需要改字体文件,还需要在 user.ini
里修改水印字体路径
最后