|
|
import os
|
|
|
import fitz
|
|
|
|
|
|
from PIL import Image
|
|
|
from tkinter import filedialog
|
|
|
from tkinter import Tk, Button, Label, messagebox, Toplevel
|
|
|
from tkinter.filedialog import askopenfilename
|
|
|
|
|
|
|
|
|
def add_image_watermark(input_image_path, watermark_image_path, output_image_path):
|
|
|
water_width = 100
|
|
|
water_height = 100
|
|
|
water_right = 50
|
|
|
water_bottom = 100
|
|
|
# 打开原始图片和要添加的水印图片
|
|
|
original_img = Image.open(input_image_path).convert("RGBA")
|
|
|
watermark_img = Image.open(watermark_image_path).convert("RGBA")
|
|
|
|
|
|
# 获取原始图片和水印图片的尺寸
|
|
|
original_width, original_height = original_img.size
|
|
|
|
|
|
# 将水印图片缩放到与原始图片相同的大小
|
|
|
watermark_img = watermark_img.resize((water_width, water_height))
|
|
|
|
|
|
# 合并原始图片和水印图片,并将结果转换为RGB模式
|
|
|
# watermarked_img = Image.alpha_composite(original_img, watermark_img).convert("RGB")
|
|
|
original_img.paste(watermark_img, (original_width - (water_width+water_right),
|
|
|
original_height-(water_height+water_bottom)), watermark_img)
|
|
|
|
|
|
# 保存水印后的图片为JPEG格式
|
|
|
original_img.save(output_image_path)
|
|
|
|
|
|
|
|
|
class CustomMessageBox(Toplevel):
|
|
|
def __init__(self, master, text, width=400, height=100):
|
|
|
super().__init__(master)
|
|
|
self.transient(master)
|
|
|
self.title("Error")
|
|
|
|
|
|
self.label = Label(self, text=text)
|
|
|
self.label.pack(padx=20, pady=20)
|
|
|
|
|
|
# 设置了宽和高
|
|
|
self.width = width
|
|
|
self.height = height
|
|
|
self.geometry(
|
|
|
f'{width}x{height}+{master.winfo_x()}+{master.winfo_y()}')
|
|
|
|
|
|
self.grab_set() # 使得对话框不会在点击窗口之外的地方时关闭
|
|
|
self.wait_window(self) # 等待对话框关闭
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
# items = os.listdir(pdfs)
|
|
|
# for f in items:
|
|
|
# name, suffix = os.path.splitext(f)
|
|
|
# if suffix == '.pdf':
|
|
|
# out = outPath + '/' + name + '_watered' + suffix
|
|
|
# input_file = os.path.join(pdfs, f)
|
|
|
# # img2pdf(water_path_png)
|
|
|
# # add_watermark(input_file,water_path_pdf,out)
|
|
|
# add_watermask_fitz(input_file, water_path_pdf, out)
|
|
|
|
|
|
# 获取当前目录
|
|
|
current_dir = os.getcwd()
|
|
|
# 获取脚本自身的路径
|
|
|
script_path = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
water_path_png = os.path.join(current_dir, 'waters/logo.png')
|
|
|
water_path_pdf = os.path.join(current_dir, 'waters/logo.pdf')
|
|
|
|
|
|
outPath = os.path.join(current_dir, 'output')
|
|
|
pdfs = os.path.join(current_dir, 'pdfs')
|
|
|
|
|
|
def on_closing():
|
|
|
root.destroy()
|
|
|
root.quit()
|
|
|
exit()
|
|
|
|
|
|
def select_file(label, extensions=['pdf', 'png', 'jpeg', 'jpg']):
|
|
|
Tk().withdraw()
|
|
|
file_path = filedialog.askopenfilename()
|
|
|
if file_path:
|
|
|
file_extension = file_path.split('.')[-1].lower()
|
|
|
if file_extension in extensions:
|
|
|
label.config(text=file_path)
|
|
|
else:
|
|
|
CustomMessageBox(root, "无效的文件类型。请选择PDF、PNG、JPEG或JPG文件。")
|
|
|
select_file()
|
|
|
|
|
|
def add_watermask():
|
|
|
file_path = lable_file.cget("text")
|
|
|
water_path = lable_stamp.cget("text")
|
|
|
print(file_path, water_path)
|
|
|
baseaname = os.path.basename(file_path)
|
|
|
name, suffix = os.path.splitext(baseaname)
|
|
|
out_path = os.path.join(os.path.dirname(
|
|
|
file_path), name + '_watered' + suffix)
|
|
|
pdf_file = fitz.open(file_path)
|
|
|
page = pdf_file[0]
|
|
|
page.insert_image(page.bound(), filename=water_path)
|
|
|
pdf_file.save(out_path)
|
|
|
lable_water.config(text=out_path)
|
|
|
|
|
|
root = Tk()
|
|
|
root.protocol("WM_DELETE_WINDOW", on_closing)
|
|
|
root.geometry("600x400")
|
|
|
|
|
|
# 选择文件
|
|
|
lable_file = Label(root, text="请选择PDF或图片")
|
|
|
lable_file.grid(row=0, column=1)
|
|
|
button_file = Button(root, text="选择PDF",
|
|
|
command=lambda: select_file(lable_file))
|
|
|
button_file.grid(row=0, column=0)
|
|
|
|
|
|
# 选择公章
|
|
|
lable_stamp = Label(root, text="请选择选择公章")
|
|
|
lable_stamp.grid(row=1, column=1)
|
|
|
button_stamp = Button(root, text="选择公章", command=lambda: select_file(lable_stamp,
|
|
|
extensions=['png', 'jpeg', 'jpg']))
|
|
|
button_stamp.grid(row=1, column=0)
|
|
|
|
|
|
# 添加水印
|
|
|
button_water = Button(root, text="添加水印", command=add_watermask)
|
|
|
button_water.grid(row=2, column=0)
|
|
|
lable_water = Label(root, text="")
|
|
|
lable_water.grid(row=2, column=1)
|
|
|
|
|
|
root.mainloop()
|