资讯详情

还在到处求人发原图?不如用Python给图片和 PDF 去掉水印~

导语

你好,铁汁萌~今天小编要教你如何去除图片和PDF中的水印~

这是不是你平时到处求人发原图,卑微?

但是学完这一期,我们就可以站起来了。~啊!也就是说,想怎么去就怎么去!

网上下载的 pdf 有些学习材料会有水印,对阅读影响很大。例如,下图是 pdf 截取的文件。接下来,让我们看看使用Python如何去除这些水印!

安装模块

PIL:Python Imaging Library 是 python 图像处理标准库非常强大,但只能支持 python 2.所以有志愿者 PIL 在此基础上创建了支持 python 3的 pillow,并加入了一些新的特性。

pip install pillow

pymupdf 可以用 python 访问扩展名称*.pdf、.xps、.oxps、.epub、.cbz或*.fb2.文件。它还支持许多流行的图像格式,包括多页TIFF图像。

pip install PyMuPDF

导入需要使用的模块

from PIL import Image from itertools import product import fitz import os

获取图片的 RGB

pdf 去水印的原理和图片去水印的原理差不多,小编先从去除上面那张图片的水印开始。

学过计算机的朋友都知道 ,计算机中用 RGB 代表红绿蓝,用 (255, 0, 0) 表示红色,(0, 255, 0) 表示绿色,(0, 0, 255) 表示蓝色,(255, 255, 255) 表示白色,(0, 0, 0) 去水印的原理是把水印的颜色变成白色(255, 255, 255)。

首先,获图片的宽度和高度,使用 itertools 模块获取宽度和高度的笛卡尔积作为像素点。每个像素点的颜色都是由 前三位的 RGB 和 第四位的 Alpha 通道构成。Alpha 只要不需要通道 RGB 数据。

def remove_img():     image_file = input("请输入图片地址:")      img = Image.open(image_file)     width, height = img.size      for pos in product(range(width), range(height)):         rgb = img.getpixel(pos)[:3]         print(rgb)

图片去水印

通过微信截图查看水印像素点 RGB。

可见水印 RGB 是 (210, 210, 210),这里用 RGB 的和超过 620 判断是水印点,此时将像素颜色替换为白色。最后保存图片。

rgb = img.getpixel(pos)[:3] if(sum(rgb) >= 620):     img.putpixel(pos, (255, 255, 255))  img.save('d:/qsy.png')

示例结果:

PDF 去水印

PDF 去除水印的原理与图片大致相同。 PyMuPDF 打开 pdf 文件后,将 pdf 每一页都转换成图片 pixmap,pixmap 有它自己的 RGB,只需要将 pdf 水印中的 RGB 改为(255, 255, 255) 最后保存为图片。

def remove_pdf():     page_num = 0     pdf_file = input("请输入 pdf 地址:")     pdf = fitz.open(pdf_file);     for page in pdf:         pixmap = page.get_pixmap()         for pos in product(range(pixmap.width), range(pixmap.height)):             rgb = pixmap.pixel(pos[0], pos[1])             if(sum(rgb) >= 620):                 pixmap.set_pixel(pos[0], pos[1], (255, 255, 255))         pixmap.pil_save(f"d:/pdf_images/{page_num}.png")         print(f"第{page_num}完成水印去除")         page_num = page_num   1

示例结果:

图片转为 pdf

图片转 pdf 需要注意的是,图片的排名必须首先转换为数字文件名 int 类型后排序 PyMuPDF 模块打开图片后,使用图片 convertToPDF() 函数转换为单页 pdf。插入到新的 pdf 文件中。

def pic2pdf():     pic_dir = input("请输入图片文件夹路径:")          pdf = fitz.open()     img_files = sorted(os.listdir(pic_dir),key=lambda x:int(str(x).split('.)     for img in img_files:         print(img)         imgdoc = fitz.open(pic_dir   '/'   img)           pdfbytes = imgdoc.convertToPDF()            imgpdf = fitz.open("pdf", pdfbytes)         pdf.insertPDF(imgpdf)            pdf.save("d:/demo.pdf")              pdf.close()

总结

pdf 图片上恼人的水印终于可以强大了 python 面前消失了。你学会了吗?

学铁汁的人赶紧拿去试试吧!记得给小编三连再走哦~

想要获得完整的源码跟踪python点击此行学习资料哦

标签: 重量变送器qsy7105

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台