10行代码给pdf文件去水印

  • 1、引言
  • 2、代码实战
    • 2.1 去除原理
    • 2.2 代码解析
    • 2.3 代码整合
  • 3、总结

1、引言

小屌丝:鱼哥,最近有点不像话了。
小鱼:嗯?? 啥个意思嘛~
小屌丝:一周了,没分享小知识了。
小鱼:就因为这个??
小屌丝:那是,我这么爱学习的人。
小鱼:怕是你有什么事情解决不了,想到我了吧?
小屌丝:呵 ~ 笑话 ~ 我 能有…什…么…事情…
小鱼:说吧,
小屌丝:这可是你让我说的,我可没主动要问的!
小鱼:说吧,咋还磨磨唧唧了呢
小屌丝:我在某站下载的pfd文档,有水印,如何去掉啊?
小鱼:我突然想起来,PPT还没写完。
小屌丝:我家楼下刚开一个烧烤店,据说还不错!
小鱼:PPT写不完,可以晚上写,助人为乐让我更快乐。

2、代码实战

在上一篇博文,我们知道了如何给pdf文档添加水印,
而本篇,我们就给pdf去水印

如果不知道如何添加水印,就看这篇:《Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩。

小屌丝:你这添加完水印,又去除水印,你这是闹哪样??
小鱼:我喜欢,我稀罕,我乐意!!

2.1 去除原理

去除方法

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

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

2.2 代码解析

1、先查看PDF文档中的水印rgb值是多少
可以看到,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转换成图片,并去除水印
代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-02-23
# @Author : carl_DJfrom PIL import Image
from itertools import product
import fitz# 去除pdf的水印
def remove_pdfwatermark():#打开源pfd文件pdf_file = fitz.open("跟小鱼学习去水印.pdf")#page_no 设置为0page_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 += 1if __name__ == '__main__':remove_pdfwatermark()

执行完成,
查看生成图片:

查看图片内容:

3、图片转为pdf

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2022-02-23
# @Author : carl_DJfrom PIL import Image
from itertools import product
import fitz''' 图片转为pdf'''
#图片所在的文件夹
pic_dir = 'D:\Project\watemark'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)#将打开后的图片转成单页pdfpdfbytes = imgdoc.convertToPDF()imgpdf = fitz.open("pdf", pdfbytes)#将单页pdf插入到新的pdf文档中pdf.insertPDF(imgpdf)
pdf.save("跟小鱼学习去水印_完成.pdf")
pdf.close()

执行代码,
查看生成的pdf文档

2.3 代码整合

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

# -*- coding:utf-8 -*-
# @Time   : 2022-02-23
# @Author : carl_DJfrom PIL import Image
from itertools import product
import fitz# 去除pdf的水印
def remove_pdfwatermark():#打开源pfd文件pdf_file = fitz.open("跟小鱼学习去水印.pdf")#page_no 设置为0page_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 = 'D:\Project\watemark'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)#将打开后的图片转成单页pdfpdfbytes = imgdoc.convertToPDF()imgpdf = fitz.open("pdf", pdfbytes)#将单页pdf插入到新的pdf文档中pdf.insertPDF(imgpdf)pdf.save("跟小鱼学习去水印_完成.pdf")pdf.close()if __name__ == '__main__':remove_pdfwatermark()pictopdf()

3、总结

写到这里,今天的分享就差不多快结束了。
需要理解的流程是,

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

关于图片及pdf如何添加水印,可以参照小鱼的这两篇博文:

  • Python3,2行代码添加水印
  • Python3,2段代码,给pdf文件添加水印

关注小鱼博客,带你了解更多更有趣python知识。

Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。相关推荐

  1. (全网唯一)Python 10行代码 实现 PDF转WORD

    安装依赖库 pip install pdf2docx 实现代码 from pdf2docx import Converter def ConvertPDFToDocx(pdfFile,docxFile ...

  2. 教你纯手工制作代码删除顽固文件,再也不用文件粉碎工具了。

    第一步:在桌面上新建一个TXT的文档,例如:delete_file.txt 第二步:在文本里面填上下面这段代码: Windows Registry Editor Version 5.00 [HKEY_ ...

  3. 10行代码实现微信群消息同步(wxpy)

    目前,微信群成员的人数上限是500人.而现实中,有很多社群.校友群.同事群的成员数量已超过500人,只能分拆在不同的微信群里面.在聊天过程中,不同微信群的成员无法相互沟通. 去年,宏论工作室介绍了基于 ...

  4. Python3,10行代码,我把情书写在她的照片里,她被我的才华征服了。

    10行代码把情书写在她的照片里 1.引言 2.Pillow 2.1 Pillow 安装 2.2 Pillow 介绍 2.2.1 新建及保存图片 2.2.2 重新绘制图片 2.2.3 图片合并 2.3 ...

  5. 如何给PDF文件去水印,10秒轻松搞定

    如何给PDF文件去水印?现在使用PDF文件也是越来越多,但是我们从网络上下载的PDF文件一般都是带水印的,想要去除PDF文件中的这些水印就需要使用到专业的PDF编辑器来进行操作,下面就为大家分享一下P ...

  6. 10行代码带你搞定目标检测(附代码)

    来源:大数据文摘 本文约2700字,建议阅读5分钟. 本文介绍采用代码搞定目标检测的技术. 计算机视觉是人工智能的一个重要领域,是关于计算机和软件系统的科学,可以对图像和场景进行识别.理解.计算机视觉 ...

  7. python包裹和运费_这个Python库真的太好用了,10行代码就能轻松搞定目标检测

    目标检测是指计算机和软件系统对图像或场景中的目标进行定位和识别的任务. 目标检测已广泛应用于人脸检测.车辆检测.人流量统计.网络图像.安防系统和无人驾驶等多个领域. 早期目标检测的实现基于经典算法,比 ...

  8. 万万想不到 10行代码搞定一个决策树

    01决策树模拟实验 文章目录 01决策树模拟实验 要求 决策树简单介绍 搭建环境 产生数据集 划分训练集和测试集 生成决策树 Cross-Validation法 可视化决策树 10行代码搞定决策树 要 ...

  9. 10 行代码玩转 NumPy!

    作者 | 天元浪子 来源 | Python作业辅导员 NumPy也可以画图吗?当然!NumPy不仅可以画,还可以画得更好.画得更快!比如下面这幅画,只需要10行代码就可以画出来.若能整明白这10行代码 ...

  10. 10行代码实现目标检测,请收下这份教程

     翻译 | 林椿眄 编辑 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学.该领 ...

最新文章

  1. 设计模式 — 行为型模式 — 迭代器模式
  2. .net 匹配html图片url_后端程序员不得不会的 Nginx 转发匹配规则
  3. excel简繁切换_EXCEL中如何随意切换简体繁体文字
  4. 聚合型神器!有了他,手机里app可以删一半
  5. Deeplearnng.AI第四部分第一周、卷积神经网络
  6. 配置MYSQL远程连接
  7. 电话号码 手机号码 等准确详细 正则表达式
  8. 用collectionview实现瀑布流-转(后面附demo,供参考)
  9. IP记录Linux所有用户操作日志的方法(附脚本)
  10. 了解和熟悉数据库相关知识
  11. 【HTML】【简易电子相册】超链接
  12. c++如何关闭进程,比如网吧收银系统
  13. HTML如何长截图谷歌,『技巧』如何利用Chrome进行网页长截图
  14. python 数学公式显示_python 数学公式·
  15. 史上最强内网渗透知识点总结
  16. 每天几分钟,教你免费下载苹果的app,赚Amazon Gift Card 亲测可用【非广告】
  17. vue下个人实现拼图验证码
  18. Bug: Safari浏览器input框placeholder和内容都不显示
  19. Android 超高仿微信图片选择器
  20. Linux Deploy:在Android上部署Linux

热门文章

  1. 计算机中职基础试题及答案,中职类计算机应用基础试题「附答案」
  2. (转载)你的个人信息是如何被盗走的?MySQL脱库,脱库的原理,怎么脱库,脱库的步骤,一库三表六字段
  3. 班级信息管理c语言代码,C语言班级信息管理系统(有详细代码).doc
  4. SAP-MM-代码大全
  5. CodeQL自动化代码审计工具
  6. 10分钟搭建一个H5商城,支持微信支付和各平台小程序
  7. 定时器cron表达式
  8. 简单好用的应用加密软件:Cisdem AppCrypt Mac版
  9. C++的Memcpy与Memcpy_s函数解析
  10. 直线绘制算法-数值微分法(DDA)