当前位置: 首页 > news >正文

利用Python去除PDF水印

摘要

本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印,并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理,并提供一个简单的使用示例。

导言

  • 简介:水印在许多 PDF 文件中都很常见,但有时它们可能会干扰文档的可读性或美观性。本文将介绍一种利用 Python 编程语言移除 PDF 水印的方法。
  • 目标:本文将介绍一个使用 PyMuPDF 和 OpenCV 库的 Python 脚本,该脚本可以自动化地将 PDF 文件中(原文件)水印移除,并将每个页面保存为单独的图像文件,然后合成为新的PDF。

背景知识

  • PyMuPDF:PyMuPDF 是一个 Python 绑定库,用于与 MuPDF(一款用于解析和渲染 PDF 文件的开源软件)进行交互。
  • OpenCV:OpenCV 是一个开源计算机视觉库,提供了许多用于图像处理和计算机视觉任务的功能。

技术细节

  1. remove_watermark 函数

    • 将图像转换为 OpenCV 格式。
    • 使用颜色阈值技术寻找特定颜色范围内的水印区域。
    • 进行膨胀和侵蚀操作以改善水印去除效果。
    • 将图像转换回 PIL 格式并返回处理后的图像。
  2. remove_pdf 函数

    • 打开 PDF 文件并设置缩放因子。
    • 遍历每一页的内容,将其转换为图像格式。
    • 对每个图像应用 remove_watermark 函数,移除水印。
    • 将处理后的图像保存到指定文件夹中。

代码示例

from itertools import product
import fitz  # PyMuPDF
from PIL import Image
import numpy as np
import cv2
import osdef remove_watermark(image, lower_bound, upper_bound):# 转换为OpenCV格式open_cv_image = np.array(image)open_cv_image = cv2.cvtColor(open_cv_image, cv2.COLOR_RGB2BGR)# 寻找特定颜色范围内的区域mask = cv2.inRange(open_cv_image, lower_bound, upper_bound)# 膨胀和侵蚀操作,用于改善水印去除效果kernel = np.ones((3, 3), np.uint8)mask = cv2.dilate(mask, kernel, iterations=1)mask = cv2.erode(mask, kernel, iterations=1)open_cv_image[mask != 0] = [255, 255, 255]# 转换回PIL格式return Image.fromarray(cv2.cvtColor(open_cv_image, cv2.COLOR_BGR2RGB))def remove_pdf(pdf_file, output_folder, dpi=1800):if not os.path.exists(output_folder):os.makedirs(output_folder)zoom = dpi / 72  # 计算缩放因子mat = fitz.Matrix(zoom, zoom)  # 创建缩放矩阵pdf = fitz.open(pdf_file)for page_num, page in enumerate(pdf):pixmap = page.get_pixmap(matrix=mat)  # 使用缩放矩阵提高DPIimg = Image.frombytes("RGB", [pixmap.width, pixmap.height], pixmap.samples)# 定义水印颜色的上下界(需要根据实际情况调整)lower_bound = np.array([168, 168, 168])upper_bound = np.array([172, 172, 172])# 去除水印img = remove_watermark(img, lower_bound, upper_bound)img_path = os.path.join(output_folder, f"{page_num}.png")img.save(img_path, format="PNG")print(f"第{page_num}页水印去除完成")pdf.close()# 使用示例pdf_path = input("请输入 PDF 地址:")
output_path = input("请输入保存处理后的图片的文件夹地址:")
remove_pdf(pdf_path, output_path)

使用示例

  • 输入要处理的 PDF 文件路径和输出文件夹路径。
  • 脚本将自动将水印从 PDF 中移除,并将处理后的图像保存到指定文件夹中。

 对比前后

去除前

去除后

结论

  • 本文介绍了一种使用 Python 编程语言移除 PDF 文件中水印的方法,通过结合 PyMuPDF 和 OpenCV 库,我们可以轻松地实现这一目标。
  • 通过调整代码中的参数,可以适应不同类型和样式的水印,从而提高水印移除的准确性和效率。

展望

  • 未来可以进一步优化代码,提高水印移除的速度和稳定性。
  • 进一步研究和探索 PDF 处理技术,拓展其在文档处理领域的应用。

参考资料

  • PyMuPDF 官方文档:链接
  • OpenCV 官方文档:链接
  • Python 官方文档:链接

相关文章:

  • 前端基础入门三大核心之HTML篇:深入理解重绘与重排 —— 概念、区别与实战演练
  • vue 纵向滚动菜单, 点击滚动到选中菜单
  • 【项目托管git】本地项目托管到 Gitee
  • 机器学习-决策树算法
  • IDEA连接MySQL后如何管理数据库
  • JavaSE——类和对象(二)~~封装
  • 光耦合器的特性和应用概述
  • Mac电脑太卡了怎么办 Mac电脑常见问题 cleanmymacX有必要买吗
  • tensorflow下载
  • 编一个自己的万年历
  • 接口使用实例——数组排序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • Android Audio基础——AudioFlinger回放录制线程(七)
  • 【NUCLEO-G071RB】007——IWDG-喂狗
  • 网站策划是什么
  • JS 中的深拷贝与浅拷贝
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • MYSQL 的 IF 函数
  • Node项目之评分系统(二)- 数据库设计
  • Vue2 SSR 的优化之旅
  • 普通函数和构造函数的区别
  • 物联网链路协议
  • 用Visual Studio开发以太坊智能合约
  • Python 之网络式编程
  • 积累各种好的链接
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $forceUpdate()函数
  • (07)Hive——窗口函数详解
  • (10)ATF MMU转换表
  • (13)Hive调优——动态分区导致的小文件问题
  • (145)光线追踪距离场柔和阴影
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (5)STL算法之复制
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转) Face-Resources
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .bashrc在哪里,alias妙用
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net OpenCVSharp生成灰度图和二值图
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • @RunWith注解作用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [<MySQL优化总结>]
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)