python一键去PDF水印,只需十行代码,超级简单…

弟弟最近要考试,临时抱佛脚在网上找了一堆学习资料复习,这不刚就来找我了,说PDF上有水印,影响阅读效果,到时候考不好就怪资料不行,气的我差点当场想把他揍一顿!

python一键去PDF水印,只需十行代码,超级简单...

算了,弟弟长大了,看在打不过他的份上,就不打他了~

python一键去PDF水印,只需十行代码,超级简单...

稍加思索,我想起了Python不是可以去水印?说搞就搞!

去除水印原理

去除方法:

  1. 用 PyMuPDF 打开 pdf 文件,将 pdf 的每一页都转换为图片 pixmap
  2. pixmap 有它自己的RGB,只需要将 pdf 水印中的 RGB 改为(255, 255, 255),并保存图片 ;
  3. 按照生成的图片,插入到pdf文档中;

因为pfd文档无法直接去除水印,需要先将pfd文档转换成图片,在逐一对图片进行水印去除操作,最后在把图片插入到pdf文档中。

代码剖析

1、先查看PDF文档中的水印rgb值是多少

python一键去PDF水印,只需十行代码,超级简单...

可以看到,RGB(179,179,179),因为这里要的是RGB色值总和,所以我们就认为,超过510,就认为是水印。

敲黑板

光学三原色是红绿蓝(RGB),也就是说它们是不可分解的三种基本颜色,其他颜色都可以通过这三种颜色混合而成,三种颜色等比例混合就是白色,没有光就是黑色。
在计算机中,可以用三个字节表示 RGB 颜色,1个字节能表示的最大数值是 255, 所以,(255, 0, 0)代表红色,(0, 255, 0)代表绿色,(0, 0, 255)代表蓝色。相应地,(255, 255, 255)代表白色,(0, 0, 0)代表黑色。从(0, 0, 0) ~ (255, 255, 255) 之间的任意组合都可以代表一个不同的颜色。
图片每个位置颜色由四元组表示,前三位分别是 RGB,第四位是 Alpha 通道。

2、pdf转换成图片,并去除水印

代码示例:

from PIL import Image
from itertools import product
import fitz

# Python学习交流群:708525271

# 去除pdf的水印
def remove_pdfwatermark():
    #打开源pfd文件
    pdf_file = fitz.open("源码找落落阿.pdf")

    #page_no 设置为0
    page_no = 0
    #page在pdf文件中遍历
    for page in pdf_file:
        #获取每一页对应的图片pix (pix对象类似于我们上面看到的img对象,可以读取、修改它的 RGB)
        #page.get_pixmap() 这个操作是不可逆的,即能够实现从 PDF 到图片的转换,但修改图片 RGB 后无法应用到 PDF 上,只能输出为图片
        pix = page.get_pixmap()

        #遍历图片中的宽和高,如果像素的rgb值总和大于510,就认为是水印,转换成255,255,255-->即白色
        for pos in product(range(pix.width), range(pix.height)):
            if sum(pix.pixel(pos[0], pos[1])) >= 510:
                pix.set_pixel(pos[0], pos[1], (255, 255, 255))
        #保存去掉水印的截图
        pix.pil_save(f"./{page_no}.png", dpi=(30000, 30000))
        #打印结果
        print(f'第 {page_no} 页去除完成')

        page_no += 1

if __name__ == '__main__':
    remove_pdfwatermark()

 

执行完成

查看生成图片:

python一键去PDF水印,只需十行代码,超级简单...

查看图片内容

python一键去PDF水印,只需十行代码,超级简单...

3、图片转为pdf

代码示例:

from PIL import Image
from itertools import product
import fitz

''' 图片转为pdf'''
#图片所在的文件夹
pic_dir = 'F:\123'

pdf = fitz.open()
#图片数字文件先转换成int类型进行排序
img_files = sorted(os.listdir(pic_dir), key=lambda x: int(str(x).split('.')[0]))
for img in img_files:
    print(img)
    imgdoc = fitz.open(pic_dir + '/' + img)
    #将打开后的图片转成单页pdf
    pdfbytes = imgdoc.convertToPDF()
    imgpdf = fitz.open("pdf", pdfbytes)
    #将单页pdf插入到新的pdf文档中
    pdf.insertPDF(imgpdf)
pdf.save("源码找落落阿_完成.pdf")
pdf.close()

 

执行代码

查看生成的pdf文档

代码整合

上面的内容都了解以后,我们就整合代码,直接运行就可以了。

from PIL import Image
from itertools import product
import fitz


# 去除pdf的水印
def remove_pdfwatermark():
    # 打开源pfd文件
    pdf_file = fitz.open("源码找落落阿.pdf")

    # page_no 设置为0
    page_no = 0
    # page在pdf文件中遍历
    for page in pdf_file:
        # 获取每一页对应的图片pix (pix对象类似于我们上面看到的img对象,可以读取、修改它的 RGB)
        # page.get_pixmap() 这个操作是不可逆的,即能够实现从 PDF 到图片的转换,但修改图片 RGB 后无法应用到 PDF 上,只能输出为图片
        pix = page.get_pixmap()

        # 遍历图片中的宽和高,如果像素的rgb值总和大于510,就认为是水印,转换成255,255,255-->即白色
        for pos in product(range(pix.width), range(pix.height)):
            if sum(pix.pixel(pos[0], pos[1])) >= 510:
                pix.set_pixel(pos[0], pos[1], (255, 255, 255))
        # 保存去掉水印的截图
        pix.pil_save(f"./{page_no}.png", dpi=(30000, 30000))
        # 打印结果
        print(f'第 {page_no} 页去除完成')

        page_no += 1


# 去除的pdf水印添加到pdf文件中
def pictopdf():
    # 水印截图所在的文件夹
    # pic_dir = input("请输入图片文件夹路径:")
    pic_dir = 'F:\123'

    pdf = fitz.open()
    # 图片数字文件先转换成int类型进行排序
    img_files = sorted(os.listdir(pic_dir), key=lambda x: int(str(x).split('.')[0]))
    for img in img_files:
        print(img)
        imgdoc = fitz.open(pic_dir + '/' + img)
        # 将打开后的图片转成单页pdf
        pdfbytes = imgdoc.convertToPDF()
        imgpdf = fitz.open("pdf", pdfbytes)
        # 将单页pdf插入到新的pdf文档中
        pdf.insertPDF(imgpdf)
    pdf.save("源码找落落阿_完成.pdf")
    pdf.close()


if __name__ == '__main__':
    remove_pdfwatermark()
    pictopdf()
# 兄弟们学习python,有时候不知道怎么学,从哪里开始学。掌握了基本的一些语法或者做了两个案例后,不知道下一步怎么走,不知道如何去学习更加高深的知识。
# 那么对于这些大兄弟们,我准备了大量的免费视频教程,PDF电子书籍,以及源代码!
# 直接在这个抠裙 708525271 自取即可~

 

 

 

 

总结

需要理解的流程是:

  • pdf文档需要先转换成图片,进行水印去除;
  • 再转换成pdf ;
  • 最后插入到新的pdf文档中;

写到这里,今天的分享就差不多快结束了,咱们下次再见!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python一键去PDF水印,只需十行代码,超级简单… - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 【Python】pyqt6入门到入土系列,非常详细…

    最近真的是运气不好,国庆前一天,隔壁小区有人中招了,结果国庆出不了门,好不容易国庆结束了,准备上班,结果小区又有个叼毛中招了,搞得我直接国庆放了半个月,还只能在家过,没事干只能这里写写,那里弄弄,于是今天就把存货分享给大家了~ 一、什么是PyQt6? 简单介绍一下PyQt6 1、基础简介 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Q…

    Python开发 2023年4月2日
    00
  • 新手学习Python需要知道的100个小技巧,加班一晚上终于整理出来了!

    哈喽兄弟们,今天给大家分享一下Python初学需要知道的100个小技巧~ 1、for循环中的else条件这是一个for-else方法,循环遍历列表时使用else语句。下面举个例子,比如我们想检查一个列表中是否包含奇数。那么可以通过for循环,遍历查找。 numbers = [2, 4, 6, 8, 1] for number in numbers: if n…

    2023年4月2日
    00
  • 西瓜视频视频颜值区如此惊艳,看我只用30行Python代码批量下载,保存本地慢慢看

    不知道各位老色批们平常看视频都是在哪里看的,有人说某鱼舞蹈区,有人说某牙舞蹈区,要我说都不如西瓜shipin,这里面个个都是人才,说话又好听,超喜欢这里的… 好了话不多说,我们直接开始本次的内容。 模块安装 本次需要使用的模块是requests 模块,没安装的小伙伴直接pip安装即可。 环境 本次使用的环境是Python3.8 ,编辑器是 pycharm  …

    Python开发 2023年3月31日
    00
  • 摸鱼也有效率——8个python自动化脚本提高打工人幸福感

    最近有许多打工人都在吐槽打工好难 每天都是执行许多重复的任务 例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等, 使用自动化脚本,就无需手动一次又一次地完成这些任务, 非常方便啊有木有?! 而在某种程度上,Python 就是自动化的代名词。 今天就来和大家一起学习一下, 用8个python自动化脚本提高工作效率~ 快乐摸鱼~ 1、自动化阅读网页新闻 …

    Python开发 2023年4月2日
    00
  • python语法到底多精妙?八大核心语句,带你深度了解

    Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for – el…

    Python开发 2023年3月31日
    00
  • 用Python来做一个简单的学生管理系统(附源码)

    小学妹说要毕业了,学了一学期Python等于没学,现在要做毕设做不出来,让我帮帮她,晚上去她家吃夜宵。 当时我心想,这不是分分钟的事情,还要去她家,男孩子晚上不要随便出门,要学会保护好自己,于是我花了十分钟给她写了一个发过去,这下不用去她家了~     代码实战 主要代码,完整代码素材、包括其它版本学生管理系统代码,也有录制好的视频讲解,第八行代码自取即可!…

    2023年3月31日
    00
  • 用Python做一个抢票脚本,演唱会门票轻松到手!

    最近演唱会还挺多的,都是大家喜欢的那些知名歌手,所以特地出一手教程给大家助力(主要是 表弟想追女神,所以教他自己抢票) 知识点 selenium 淘宝滑块处理 抢购逻辑实现 必备环境 python 3.8 pycharm 专业版 谷歌浏览器+谷歌驱动+selenium3.141.0 stealth.min.js 代码展示 模块 import time fro…

    Python开发 2023年3月31日
    00
  • 关于pycharm打开时很卡,一直加载中的解决办法~

    相信很多刚开始使用pycharm不太熟练的小伙伴,每天一开机打开pycharm总是卡半天,不知道的还以为是电脑卡了或者啥问题的。 莫慌,其实并不是… 今天我们就来解决一下这个问题 大致总结了以下这几种方法 1、exclude不必要文件 依次打开 file(文件) → project:administrator(project:administrator 项目…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部