目录
前言:
题主大一,为了完成信息技术作业,而在网上到处研究学习,完成了一个python代码,能实现去水印和加水印,但是功能非常局限,只能去除最普通的水印,和加普通水印,这是受到库的限制,还有我学术不精,特下此篇文章给大伙做一下参考。效果如下
解析:
以下都是我自己定义的函数,源代码在最后面需要自取,但是注意时间,编写时间2024/3/29,python3.7,库是最新的
-
remove_pdf()
函数:-
这个函数的目的是去除PDF文件中的水印。
-
它首先通过
fitz.open()
打开PDF文件。 -
然后遍历PDF的每一页,使用
get_pixmap()
方法获取页面的像素图。 -
接着,它会遍历像素图中的每一个像素点,并检查该点的RGB值之和是否大于等于576(这里假设水印的颜色较深,RGB值之和较大)。
-
如果是,它会将该像素点的颜色设置为白色,即
(pixmap.set_pixel(pos[0], pos[1], (255, 255, 255))
。 -
最后,它会将修改后的像素图保存为PNG图片,并打印出相应的完成信息。
-
-
pic2pdf()
函数:-
这个函数用于将一系列图片文件转换成一个PDF文件。
-
它首先通过
os.listdir()
获取指定目录下的所有图片文件,并按照文件名前的数字排序。 -
然后,它会遍历这些图片文件,使用
fitz.open()
打开每一个图片文件,并使用convert_to_pdf()
方法将图片转换成PDF格式。 -
接着,它会创建一个新的PDF文件,并将转换后的PDF文件插入到这个新PDF中。
-
最后,它会保存并关闭这个新PDF文件。
-
-
clear_file()
函数:-
这个函数用于删除指定文件夹下的所有文件。
-
它首先检查指定的文件夹是否存在。
-
如果存在,它会获取该文件夹下的所有文件和子文件夹,并遍历它们。
-
对于每一个文件,它会使用
os.remove()
方法将其删除,并打印出相应的完成信息。
-
-
add_watermark(content)
函数:-
这个函数用于给PDF文件添加水印。
-
它首先通过
fitz.open()
打开PDF文件,并遍历每一页。 -
对于每一页,它会将页面的像素图保存为PNG图片。
-
然后,它会调用
add_mark()
函数,将水印添加到这些PNG图片上,并将添加水印后的图片保存回中转文件夹。 -
注意,
add_mark()
函数的具体实现没有在这段代码中给出。
-
-
主程序部分:
- 程序首先提示用户选择一个功能来运行(加水印、去水印或退出)。
- 然后,它会让用户选择一个中转文件夹,用于存放临时文件。
- 接着,它会让用户选择一个PDF文件,用于进行水印操作。
- 最后,它会让用户选择一个输出文件夹,用于存放最终的PDF文件。
- 用户还可以输入输出文件的名称。
- 根据用户的选择,程序会调用相应的函数来执行任务。
引用的库:
import time
from itertools import product
from tkinter import filedialog
import fitz
import os
from watermarker.marker import add_mark
这几个库不能少,少一个都用不了,time库引入是为了在每个提示语后留一定时间给使用者看,itertools的这个是为了迭代图片的数值就是像素,一个个获取像素信息,thinker这个库是为了实现选择文件的可视化,因为输入文件路径很麻烦还要退出去复制,很多人甚至不懂,所以就用它跳到Windows的文件管理进行选择,fitz库是用来将图片转换成pdf的一个库,用它可以打开指定图片保存到一个文档中,然后继续插入图片,最后导出成pdf,os库是为了指定文件的路径选择,确保定位到那个文件,最后一个watermarker是添加水印的集成库,好像是简化了那个PIL(Python Imaging Library)。安装所需要的库需要用到指令,这个可以在pycharm的terminal指令台里输入,但我更喜欢使用系统的命令提示符,打开win,搜索cmd就会看到