当前位置:首页 > 话题广场 > 问答专区 > 科技

pdf打印机怎么去除水印?总结很全面速看!用 Python 去除 PDF 水印,你学会吗?

今天介绍用Python去除PDF(图片)中的水印。

思路很简单,代码也很简洁。

首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面。

这张图片是前几天整理《数据结构和算法》PDF里的一个截图,带着公众号的水印。

从上图可以明显看到,为了不影响阅读正文,水印颜色一般比较浅。因此,我们可以利用颜色差这个特征来去掉水印。即:用 Python 读取图片的颜色,并将浅颜色部分变白。

Python 标准库 PIL 可以获取图片的颜色,Python2 是系统自带的,Python3 需要自己安装,我用的 Python 3.8,需要执行以下命令安装

pip install pillow

安装完成,读取图片,并获取图片的尺寸(宽度和高度)

from PIL import Image img = Image.open('wa;) width, height = img.size

进行下一步之前,先简单介绍下计算机里关于颜色的知识。光学三原色是红绿蓝(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

for i in range(width): for j in range(height): pos = (i, j) prin(pos)[:3])

图片每个位置颜色由四元组表示,前三位分别是 RGB,第四位是 Alpha 通道,我们不需要关心。

有了 RGB ,我们就可以对其修改。

从图中可以发现,水印的 RGB 是 #d9d9d9,这里是用十六进制表示的,其实就是(217, 217, 217)。

这三个颜色值都越靠近 255,颜色就越淡,当它们都变成 255,也就成了白色。所以只要 RGB 都大于 217 的位置,我们都可以给它填成白色。即:RGB 三位数之和大于等于 651。

if sum(pos)[:3]) >= 651: img.putpixel(pos, (255, 255, 255))

完整代码如下:

from PIL import Image img = Image.open('wa;) width, height = img.size for i in range(width): for j in range(height): pos = (i, j) if sum(pos)[:3]) >= 651: img.putpixel(pos, (255, 255, 255)) img.save('wa;)

有了上面的基础,去除 PDF 的水印就简单了,思路是将每页 PDF 转成图片,然后修改水印的 RGB,最后输出图片即可。

安装 pymupdf 库,用来来操作 PDF

pip install pymupdf

读取 PDF,并转图片

import fitz doc = ("数据结构和算法手册@公众号渡码.pdf") for page in doc: pix = ()

该 PDF 共 480 页,所以需要遍历每一页,并获取每一页对应的图片pix。pix对象类似于我们上面看到的img对象,可以读取、修改它的 RGB。

() 这个操作是不可逆的,即能够实现从 PDF 到图片的转换,但修改图片 RGB 后无法应用到 PDF 上,只能输出为图片。

修改水印 RGB 跟刚才一样,区别是这里的 RGB 是一个三元组,没有 Alpha 通道,代码如下:

from itertools import product for pos in product(range), range)): if sum(pos[0], pos[1])) >= 651: (pos[0], pos[1], (255, 255, 255))

完整代码如下:

from itertools import product import fitz doc = ("数据结构和算法手册@公众号渡码.pdf") page_no = 0 for page in doc: pix = () for pos in product(range), range)): if sum(pos[0], pos[1])) >= 651: (pos[0], pos[1], (255, 255, 255)) (f"pdf_pics/page_{page_no}.png", dpi=(30000, 30000)) print(f'第 {page_no} 页去除完成') page_no += 1

这种方案是有缺点的,第一,输出并非 PDF 格式;第二,输出的图片比较模糊,后续还有待优化,最好是能直接修改 PDF。

原文链接:

1.《pdf打印机怎么去除水印?总结很全面速看!用 Python 去除 PDF 水印,你学会吗?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《pdf打印机怎么去除水印?总结很全面速看!用 Python 去除 PDF 水印,你学会吗?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/why/3204171.html

上一篇

关于打印机缩放了怎么恢复,你需要知道这些创智云_打印纸张大小设置

下一篇

半张纸用打印机怎么打印?总结很全面速看!怎么用打印机打印文档?掌握这些技巧,其实很简单

pdf打印机怎么去除水印?我来告诉你答案万兴PDF专家:秒会的全能PDF编辑神器,去除烦人的水印

pdf打印机怎么去除水印相关介绍,经常处理文档的小伙伴基本上不熟悉PDF格式的文件。 一般情况下,PDF格式的文件一般都是从其他软件“输出”过来的,比如Word、PPT,甚至PS、AI等。 少东家在这里给不甚了解PDF格式的小伙伴简单...

pdf打印机怎么去除水印?总结很全面速看!PDF删除水印的几种方法

pdf打印机怎么去除水印相关介绍,从网际网路下载的文件中,80%都是PDF格式,通常下载的文件都包含水印。如果你想的话,应该选择删除水印。删除水印有多种方法,也有多种情况。 今天,小编就总结下删除pdf水印的方法,希望以下内容能帮到你...

pdf打印机怎么去除水印?终于找到答案了如何清除PDF中的水印?PDF删除水印的方法

pdf打印机怎么去除水印相关介绍,我们通常会去网上搜索和下载资料,但下载的PDF文档内容经常会受到水印的影响,怎么办才能删除这个PDF水印?(莎士比亚,Northern Exposure)。 PDF有两种类型,第一种是相对常见的一般P...