吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 657|回复: 14
收起左侧

[Python 原创] 基于python+PIL库批量为图片添加水印

[复制链接]
ExistDown 发表于 2024-7-22 12:14
前段时间因为工作原因需要给大量照片添加水印,且每个图片中的水印内容均不相同,尝试过ps的脚本,没研究出结果,后来使用python+PIL实现了想要的效果,这里作为新人分享以下
以下是代码,有能优化的地方希望大佬提出
[Python] 纯文本查看 复制代码
from PIL import Image, ImageDraw, ImageFont
import pandas as pd


#  一般水印为了增加可读性,需要设置阴影
def add_shadow(draw, text, font, xy, shadowcolor, shadow_offset):
    draw.text((xy[0] + shadow_offset[0] // 2, xy[1] + shadow_offset[1] // 2), text, font=font, fill=shadowcolor)
    draw.text(xy, text, font=font, fill="white")


# 读取包含水印信息的CSV文件,这里填写你存储水印内容的表格路径,表格标题分别是:图像文件名、水印内容1、水印内容2
df = pd.read_csv(r'C:\Users\admin\Desktop\photo\watermark.csv')

# 定义字体文件路径
font1_path = "C:/Windows/Fonts/Dengb.ttf"
font2_path = "C:/Windows/Fonts/Deng.ttf"

# 循环处理每一行数据,表格的标题依次为以下内容
for index, row in df.iterrows():
    image_file = row['图像文件名']
    watermark_text1 = row['水印内容1']
    watermark_text2 = row['水印内容2']

    # 打开原始图像
    image = Image.open(f'C:/Users/admin/Desktop/photo/{image_file}')
    width, height = image.size

    # 根据图片的横纵向情况设置水印高度
    if width > height:
        text_height1 = 90  # 横向图片文字的起始高度
        text_height2 = 100  # 横向图片第二行文字的间隔距离
    else:
        text_height1 = 95  # 纵向图片文字起始高度
        text_height2 = 100  # 纵向图片第二行的间隔距离

    # 添加水印
    draw = ImageDraw.Draw(image)
    #  设置文字大小
    font1 = ImageFont.truetype(font1_path, 25)
    font2 = ImageFont.truetype(font2_path, 80)

    # 添加第一行水印及阴影
    text_width1, _ = draw.textsize(watermark_text1, font1)
    text_x1 = (width - text_width1) // 2
    text_y1 = height - text_height1 - 0
    add_shadow(draw, watermark_text1, font1, (text_x1, text_y1), "grey", (1, 1))

    # 添加第二行水印及阴影
    text_width2, _ = draw.textsize(watermark_text2, font2)
    text_x2 = (width - text_width2) // 2
    text_y2 = text_y1 - text_height2 - 0
    add_shadow(draw, watermark_text2, font2, (text_x2, text_y2), "grey", (2, 2))

    # 保存带水印的图像
    image.save(f'C:/Users/admin/Desktop/photo/修改后/{image_file}')

print("水印添加完成!")


到这里就可以看到水印效果啦,效果不佳再进行代码调整
顺便再给个批量获取当前文件夹文件名的脚本
[PowerShell] 纯文本查看 复制代码
dir /b >files.txt

内容粘贴到文本文档改为bat放到照片目录运行就行了

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tzq001 发表于 2024-7-26 23:58
是否读取指定指定目录 下指定扩展名的图片,直接添加更简单呢?从excel中读取,还得整理图片名到excel中
nan5201314 发表于 2024-7-22 13:36
friend2010 发表于 2024-7-22 13:51
lyy6786646 发表于 2024-7-22 14:37
感谢楼主
SkyAerope 发表于 2024-7-22 14:50
学习了,感谢楼主
hiacai 发表于 2024-7-22 14:51
学习了,感谢楼主
qisangmo 发表于 2024-7-22 15:40
谢谢提供思路
GIS2580 发表于 2024-7-22 15:59
感谢楼主,非常有帮助
jjm580 发表于 2024-7-22 16:05
学习了。感谢楼主,非常有帮助
lorne 发表于 2024-7-22 16:14
厉害 666
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-8 09:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表