Python图片加水印

原文:https://blog.c12th.cn/archives/23.html

前言

最近写的文章有大量的图片,就想着加个水印,在百度搜代码时发现下面的ai对话可以生成代码…


请添加图片描述

原图

请添加图片描述

加水印后


部分代码

# 遍历输入目录下的所有文件
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文件

# 指定INI文件的路径
ini_file_path = 'user.ini'

# 读取INI文件
config = configparser.ConfigParser()
config.read(ini_file_path)

# 从INI文件中获取配置值
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'])
[diy]
path = STXINGKA.TTF
size= 36			
text = @Reverse
color = 0,255,255

[directories]
input = ./input
out = ./out

[xy]
x = 50
y = 50
# ini备注
path        水印字体路径
size        水印字体大小
text        水印字体
color       水印字体颜色(RGB)
input       将要处理的文件路径
out         处理后的文件路径
x           水印位置x
y           水印位置y

CMD

rd /s /q .\out

rd /s /q .\input

mkdir input

先删除 outinput 文件夹,再生成 input 文件夹


完整代码

# 工程:test
# 创建时间:2024/5/10 22:28
# encoding:utf-8

from PIL import Image, ImageDraw, ImageFont
import os
import configparser

# 指定INI文件的路径
ini_file_path = 'user.ini'

# 读取INI文件
config = configparser.ConfigParser()
config.read(ini_file_path)

# 从INI文件中获取配置值
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('批量处理完成!')


使用教程(打包整理后文件)

  1. 打开 user.ini里面的配置可自行修改
    请添加图片描述

  2. 把将要处理的图片全部放到 input 文件夹中

  3. 双击运行 main.exe

  4. 等待窗口运行

  5. 处理后的图片在 out
    请添加图片描述

  6. 双击 删除.bat (这个用于快速清理 inputout 的文件)
    请添加图片描述

注意事项

  1. 图片支持 png,jpg,webp格式图片,如需要添加其他图片格式可自行修改源码

  2. 如果需要改字体文件,还需要在 user.ini 里修改水印字体路径

path = 水印字体路径

最后

代码已上传到 githubgitee

打包整理后文件 蓝奏云 密码:baea


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c12th

能请我喝奶茶吗qwq

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值