资讯详情

黑科技编程开发,利用Python使图片完美去除水印

网上下载的 pdf 有些学习材料会有水印,对阅读影响很大。例如,下图是 pdf 截取文件。

在这里插入图片描述

安装模块

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 去水印的原理和图片去水印的原理大致相同,用 PyMuPD 打开 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('.')[0]))
    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技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

标签: 重量变送器qsy7105

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

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