Python 使用 pillow库 批量给图片添加水印小工具

嗨害大家好鸭!我是爱摸鱼的芝士❤

这次使用python代码来给照片
批量添加水印❤

请添加图片描述

添加水印逻辑

"""
    为当指定目录下所有的图片文件添加水印
"""

import os

from PIL import Image
import PIL.PngImagePlugin

logo_filename = 'catlogo.png'
logo_img = Image.open(logo_filename) 

target_dir = 'assets'

work_dir = target_dir + '_watermark'
if not os.path.exists(work_dir):
    os.makedirs(work_dir)

for filename in os.listdir(target_dir):

    if not (filename.endswith('.jpg') or filename.endswith('.png')) or filename == logo_filename:
        continue

    filename_load_path = os.path.join(target_dir, filename)

    cat_img = Image.open(filename_load_path)  
    cat_img_width, cat_img_height = cat_img.size

    logo_img_copy = logo_img.copy()
    min_side = cat_img_width if cat_img_width < cat_img_height else cat_img_height
    logo_img_copy = logo_img_copy.resize((int(min_side / 6), int(min_side / 6)))

    logo_width, logo_height = logo_img_copy.size
    cat_img.paste(logo_img_copy, (0, cat_img_height - logo_height), logo_img_copy)

    cat_img.save(os.path.join(work_dir, filename))

请添加图片描述

封装为函数

后面需要结合 tkinter 打造一个工具,
所以需要对原来的代码进行封装

import os

from PIL import Image
import PIL.PngImagePlugin


def add_watermark(logo_filename, target_dir):

    logo_img = Image.open(logo_filename) 

    work_dir = target_dir + '_watermark'
    if not os.path.exists(work_dir):
        os.makedirs(work_dir)


    for filename in os.listdir(target_dir):

        if not (filename.endswith('.jpg') or filename.endswith('.png')) or filename == logo_filename:
            continue
        filename_load_path = os.path.join(target_dir, filename)
        cat_img = Image.open(filename_load_path)  # type:PIL.PngImagePlugin.PngImageFile
        cat_img_width, cat_img_height = cat_img.size
        logo_img_copy = logo_img.copy()
        min_side = cat_img_width if cat_img_width < cat_img_height else cat_img_height
        logo_img_copy = logo_img_copy.resize((int(min_side / 6), int(min_side / 6)))

        logo_width, logo_height = logo_img_copy.size
        cat_img.paste(logo_img_copy, (0, cat_img_height - logo_height), logo_img_copy)

        cat_img.save(os.path.join(work_dir, filename))

请添加图片描述

使用 tkinter 编写小工具

import tkinter as tk
from tkinter import filedialog
from utils import add_watermark

root = tk.Tk()
root.title('水印工具')
root.geometry('500x300')

dir_var = tk.StringVar()
file_var = tk.StringVar()
status_var = tk.StringVar()

input_dir_frame = tk.Frame()
input_dir_frame.pack()
tk.Label(input_dir_frame, text='文件夹:').pack(side=tk.LEFT)
tk.Entry(input_dir_frame, width=40, textvariable=dir_var).pack(side=tk.LEFT)
input_btn = tk.Button(input_dir_frame, text='选择')
input_btn.pack()

input_file_frame = tk.Frame()
input_file_frame.pack()
tk.Label(input_file_frame, text='水印文件:').pack(side=tk.LEFT)
tk.Entry(input_file_frame, width=40, textvariable=file_var).pack(side=tk.LEFT)

input_file_btn = tk.Button(input_file_frame, text='选择')
input_file_btn.pack()

add_watermark_btn = tk.Button(root, text='添加水印')
add_watermark_btn.pack()
tk.Label(root, textvariable=status_var).pack()


def load_dir_path():
    dir_path = filedialog.askdirectory()
    dir_var.set(dir_path)


def load_file_path():
    file_path = filedialog.askopenfilename()
    file_var.set(file_path)


input_btn.config(command=load_dir_path)
input_file_btn.config(command=load_file_path)


def add_watermark2():
    add_watermark(file_var.get(), dir_var.get())
    status_var.set('水印添加完毕')


add_watermark_btn.config(command=add_watermark2)

if __name__ == '__main__':
    root.mainloop()

请添加图片描述

最后对程序进行打包

python -m venv venv 
venv\Scripts\activate.bat
pip install pillow 
pip install pyinstaller 
pyinstaller -F -w watermark.py

猜你喜欢

转载自blog.csdn.net/m0_74872863/article/details/130311572