批量图片水印工具

文章正文
发布时间:2025-07-11 09:04

楼主的程序强制设置了图片尺寸,可是我习惯于先裁剪后加水印,所以楼主的程序把我的图片缩小了。于是我利用星火大模型重写了代码,运行正常:

[Python] 纯文本查看 复制代码

import os from PIL import Image, ImageEnhance from tkinter import Tk, filedialog, Label, Entry, Button, StringVar, IntVar, messagebox def add_watermark(input_folder, watermark_path, output_folder, position, transparency): watermark = Image.open(watermark_path).convert("RGBA") alpha = watermark.split()[3] alpha = ImageEnhance.Brightness(alpha).enhance(transparency / 100.0) watermark.putalpha(alpha) for filename in os.listdir(input_folder): if filename.endswith(('.png', '.jpg', '.jpeg')): image_path = os.path.join(input_folder, filename) image = Image.open(image_path).convert("RGBA") if position == "左上角": position = (0, 0) elif position == "右上角": position = (image.width - watermark.width, 0) elif position == "左下角": position = (0, image.height - watermark.height) elif position == "右下角": position = (image.width - watermark.width, image.height - watermark.height) image.paste(watermark, position, mask=watermark) output_path = os.path.join(output_folder, filename) image.save(output_path, 'PNG') messagebox.showinfo("完成", "所有图片已成功添加水印!") def select_folder(): root = Tk() root.withdraw() folder_selected = filedialog.askdirectory() root.destroy() return folder_selected def main(): root = Tk() root.title("批量添加水印") Label(root, text="输入文件夹路径:").grid(row=0, column=0) input_folder = StringVar() Entry(root, textvariable=input_folder, width=50).grid(row=0, column=1) Button(root, text="选择", command=lambda: input_folder.set(select_folder())).grid(row=0, column=2) Label(root, text="水印文件路径:").grid(row=1, column=0) watermark_path = StringVar() Entry(root, textvariable=watermark_path, width=50).grid(row=1, column=1) Button(root, text="选择", command=lambda: watermark_path.set(filedialog.askopenfilename())).grid(row=1, column=2) Label(root, text="输出文件夹路径:").grid(row=2, column=0) output_folder = StringVar() Entry(root, textvariable=output_folder, width=50).grid(row=2, column=1) Button(root, text="选择", command=lambda: output_folder.set(select_folder())).grid(row=2, column=2) Label(root, text="水印位置:").grid(row=3, column=0) position = StringVar() position.set("右下角") Entry(root, textvariable=position, width=10).grid(row=3, column=1) Label(root, text="透明度(%):").grid(row=4, column=0) transparency = IntVar() transparency.set(100) Entry(root, textvariable=transparency, width=10).grid(row=4, column=1) Button(root, text="开始处理", command=lambda: add_watermark(input_folder.get(), watermark_path.get(), output_folder.get(), position.get(), transparency.get())).grid(row=5, columnspan=3) root.mainloop() if __name__ == "__main__": main()