Python实现图片与PDF去水印完整指南

Mason
Mason
发布时间:2026-10-16| 5人浏览过
原创

本文详解如何使用Python去除图片和PDF文件中的水印。通过Pillow库处理图片RGB像素,利用PyMuPDF转换PDF页面为图像并修改像素值,实现水印去除。同时涵盖图片排序转PDF的完整流程,提供具体代码示例与参数设置。

从网络下载的PDF学习资料常带有水印,严重影响阅读体验。例如,从PDF文件中截取的部分内容可能包含明显的水印痕迹。

安装模块

PIL(Python Imaging Library)是Python中功能强大的图像处理标准库,但仅支持Python 2.7。志愿者基于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通道构成,此处仅需处理RGB数据,忽略Alpha通道。

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时,判定该点为水印点,并将其颜色替换为白色(255, 255, 255),最后保存处理后的图片。

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

示例结果:

PDF 去水印

PDF去水印原理与图片处理大致相同。使用PyMuPDF打开PDF文件后,将每一页转换为Pixmap图像对象。Pixmap包含自身的RGB数据,只需将水印区域的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()

总结

借助Python的强大功能,PDF和图片上令人困扰的水印问题得以解决。

到此这篇关于python为图片和PDF去水印详解的文章就介绍到这了,更多相关python图片和PDF去水印内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。