资讯详情

超简单!用 Python 为图片和 PDF 去掉水印

6e124c86962821056c17aa218976c55c.png

大家好,我是菜鸟哥。

网上下载的 pdf 有些学习材料会有水印,对阅读影响很大。例如,下图是 pdf 截取的文件,今天我们就来用了Python解决这个问题。

安装模块

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

pipinstallpillow

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

pipinstallPyMuPDF

导入需要使用的模块

fromPILimportImage fromitertoolsimportproduct importfitz importos

获取图片的 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 数据。

defremove_img(): image_file=input("请输入图片地址:")  img=Image.open(image_file) width,height=img.size  forposinproduct(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) 最后保存为图片。

defremove_pdf(): page_num=0 pdf_file=input("请输入 pdf 地址:") pdf=fitz.open(pdf_file); forpageinpdf: pixmap=page.get_pixmap() forposinproduct(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 文件中。

defpic2pdf(): pic_dir=input("请输入图片文件夹路径:")  pdf=fitz.open() img_files=sorted(os.listdir(pic_dir),key=lambdax:int(str(x).split('.) forimginimg_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的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

  • 1).卧槽!Pdf转Word用Python轻松搞定!

  • 2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃

  • 3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 

  • 4).80行代码!用Python做一个哆来A梦分身 

  • 5).你必须掌握的20个python代码,短小精悍,用处无穷 

  • 6).30个Python奇淫技巧集 

  • 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 

  • 8).再见Python!我要学Go了!2500字深度分析!

  • 9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片

标签: 重量变送器qsy7105

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

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