ExistDown 发表于 2024-7-22 12:14

基于python+PIL库批量为图片添加水印

前段时间因为工作原因需要给大量照片添加水印,且每个图片中的水印内容均不相同,尝试过ps的脚本,没研究出结果,后来使用python+PIL实现了想要的效果,这里作为新人分享以下{:1_918:}
以下是代码,有能优化的地方希望大佬提出
from PIL import Image, ImageDraw, ImageFont
import pandas as pd


#一般水印为了增加可读性,需要设置阴影
def add_shadow(draw, text, font, xy, shadowcolor, shadow_offset):
    draw.text((xy + shadow_offset // 2, xy + shadow_offset // 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("水印添加完成!")


到这里就可以看到水印效果啦,效果不佳再进行代码调整
顺便再给个批量获取当前文件夹文件名的脚本
dir /b >files.txt
内容粘贴到文本文档改为bat放到照片目录运行就行了

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

感谢楼主{:1_918:}

hiacai 发表于 2024-7-22 14:51

学习了,感谢楼主

qisangmo 发表于 2024-7-22 15:40

谢谢提供思路

jjm580 发表于 2024-7-22 16:05

学习了。感谢楼主,非常有帮助

lorne 发表于 2024-7-22 16:14

厉害 666 {:1_921:}

jinwenqing 发表于 2024-7-22 16:42

感谢楼主,非常有帮助

stargay 发表于 2024-7-23 10:44

学习了,感谢楼主
页: [1] 2
查看完整版本: 基于python+PIL库批量为图片添加水印