pdf如何去除水印,pdf去水印的三种方法
首先,今天我们介绍用Python去除PDF(图片)水印的方法。思路简单,代码简洁。
首先考虑Python如何去除图像水印,然后将这个想法复用到PDF中。
原理这张照片是前几天编译成《数据结构和算法》 PDF的截图,有微信官方账号的水印。
从上图可以看出,为了不影响文字的阅读,水印的颜色一般比较浅。因此,可以使用
颜色差
的特征来去除水印。也就是用 Python 读取图片的颜色,并将浅颜色部分变白。
Python标准库PIL为准备可以得到图像的颜色。Python2是系统自带的。Python3需要自己安装。我用的Python 3.8必须通过运行以下命令安装:pipinstallpillow安装完成,需要读取镜像。从plimportimage=image . open(pic . png))width,height=img.size中获取图片的大小(宽度和高度)并进行下一步3358www前。Sina.com/.
在计算机中,RGB的颜色可以用3个字节来表示。一个字节能表达的最大值是255。
所以请参考
光学三原色是红绿蓝(RGB
。因此,请参考(
三种颜色等比例混合就是白色,没有光就是黑色
[0,0,0]和[255,255,255]之间的任意组合都可以用来表示不同的颜色。
然后,用下面的代码对图像进行rgbforiinrange(width):forjinrange(height):pos=(I,j) print) img.getpixel (pos) 33603)
有了RGB,我们就可以修改了。
从图中可以看出,水印的RGB是#d9d9d9,这里用十六进制表示,实际上是(217,217,217)。
这三种颜色的数值越接近255,颜色就会越浅,到255就变成白色了。如果RGB都是大于217的位置,我们可以用白色填充。也就是说,RGB的三位之和为651或更大。
SUM(img . get pixel(pos([:3])651:img . put pixel(pos,)255,255,255))的完整代码如下:fromportimagemg height=img . sizeforinrange(width):forjinrange):pos=
代码的思想是将每一页的PDF转换成图像,校正水印的RGB,最后输出图像。
安装运行pdf pipinstallpymupdf 2的pymupdf库,导入PDF,然后输入图片importfitzdoc=fitz.open(数据结构与算法手册@公众号转code.pdf)
Page.get_pixmap()操作是不可逆的,可以从PDF转换为图像,但是修改图像RGB不能应用于PDF,只能输出为图像。
修改水印RGB和刚才一样,只不过这里的RGB是没有alpha通道的三元组。代码如下。
fromitertoolsimportproductforpos product(Range(pix . width),Range(pix . height))3360 if sum)pix . pixel)POS)(255,255,255)完整代码如下:FromitertoolsImportProductionImportFitZDoc=fitz . open(数据结构与算法手册@微信官方账号转账code.pdf)page _ no=0 for pageindoc 3360 for pageindoc Range)pix . height):if sum)pix . pixel)POS[0],pos[1
首先,输出不是PDF格式。
二是输出图像模糊,然后需要优化。最好直接修改PDF。