利用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 官方文檔:鏈接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14679.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全國數據庫管理系統設計賽-人大金倉內核實訓安排正式發布

作為數據庫領域國家隊,人大金倉積極響應國家戰略,通過賽題設計、內核技術支撐及賽前培訓等多方面,大力支持全國大學生計算機系統能力大賽-數據庫管理系統設計大賽成功舉辦。目前第二屆全國大賽正在火熱報名中,各種獎項等你來拿&am…

《web應用設計》第八次作業

我的小組長是姚若希,我們組課程設計的題目是:學生管理系統 ,我認領的功能模塊是:課程管理 2.查詢并分頁

Html5 + Css3筆記詳細匯總大全

Html5 + Css3知識點Gitee地址 html5css3知識點: 尚硅谷—HTML5+CSS3知識點 介紹 屬性 屬性:在標簽中(開始標簽或自結束標簽)還可以設置屬性 屬性是一個名值對(x=y) 屬性用來設置標簽中的內容如何顯示 屬性和標簽名或其它屬性應該使用空格隔開 屬性名不能瞎寫,應該根據文…

只需三步,即可配置HTTPS跳轉

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。通過SSL/TLS協議對數據進行加密,保證了數據傳輸的安全,防止數據被截獲、…

UWB論文:Introduction to Impulse Radio UWB Seamless Access Systems(2):脈沖;超寬帶;測距;定位

3) 測距/接收器 像全球定位系統(GPS)這樣的系統依賴于單向測距One Way Ranging(OWR),其中多個衛星(代表固定節點,稱為錨點anchors)定期傳輸同步的無線電數據包集合,這允許…

sh控制臺輸入文字多行 按“# ? ?”結束

如果在Unix shell中輸入多行文字,那么這樣操作: 1. 打開您的終端(Terminal)。 2. 輸入您的文字,每行文字后按回車鍵。 3. 當您完成輸入所有文字后,輸入“# ? ?”然后按回車鍵,表示輸入結束。…

將Surface的分辨率減半以省電(二合一本\筆記本電腦適用)

【完全自定義分辨率教程】這篇教程用于將Surface之類的高分屏(高分辨率)的二合一本或筆記本等的分辨率調整為原來的一半,以實現省電等目的。 下載CRU(Custom Resolution Utility)解壓后,打開CRU.exe選擇當…

Java期末復習指南(1):知識點總結+思維導圖,考試速成!

🔖面向對象 📖 Java作為面向對象的編程語言,我們首先必須要了解類和對象的概念,本章的所有內容和知識都是圍繞類和對象展開的! ? 思維導圖1 ? 類和對象的概念 ? 簡單來說,類就是對具有相同特征的一類事…

(全面)Nginx格式化插件,Nginx生產工具,Nginx常用命令

目錄 🎫 前言 🎉 開篇福利 🎁 開篇福利 x2 Double happiness # 介紹 # 地址 # 下載 💻 命令及解析 # 整個文件系統中搜索名為nginx.conf的文件 # 編輯nginx.conf文件 # 重新加載配置文件 # 快速查找nginx.conf文件并使…

建筑施工突發事故應急處置vr安全培訓平臺

在不斷發展的時代背景下,掌握必要的應急安全知識已成為我們生活中不可或缺的一部分。由央企攜手我們華銳推出的3D線上應急宣教虛擬體驗館,標志著民眾應急安全教育的全新里程碑,不僅突破了傳統學習模式的局限,還讓每個人都能在靈活…

防火墻技術基礎篇:基于IP地址的轉發策略

防火墻技術基礎篇:基于IP地址的轉發策略的應用場景及實現 什么是基于IP地址的轉發策略? 基于IP地址的轉發策略是一種網絡管理方法,它允許根據目標IP地址來選擇數據包的轉發路徑。這種策略比傳統的基于目的地地址的路由更靈活,因…

深度學習之Python+OpenCV+Tensorflow實時人體檢測和計數

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 深度學習之PythonOpenCVTensorflow實時人體檢測和計數項目簡介 一、項目背景與意義 隨著科技的不斷發展&#xff…

Java - JsonPath 特殊場景解決方案

我們先看下JSONPath的使用,這里使用的是 GitHub - json-path/JsonPath: Java JsonPath implementation,其README中已經提供了相關的介紹和使用示例,這里再簡單介紹下,我們這里直接使用其中的示例數據。 {"store": {&quo…

macOS 安裝a d b

brew install android-platform-tools

Go微服務: 日志系統ELK的應用

概述 基于前文,我們已經了解并搭建完成ELK的所有環境了,現在我們來結合應用程序來使用ELK參考前文:https://active.blog.csdn.net/article/details/138898538 封裝日志模塊 在通用工具模塊: gitee.com/go-micro-services/common 這個包是通…

CTFHUB技能樹——SSRF(三)

目錄 URL Bypass 數字IP Bypass 302跳轉 Bypass DNS重綁定 Bypass SSRF繞過方法: (1) http://abc.com127.0.0.1 (2)添加端口號 http://127.0.0.1:8080 (3)短地址 htt…

限制U盤使用:企業數據安全的軟件解決方案

在當今數字化辦公環境中,U盤作為一種便捷的數據傳輸工具,其使用在企業內部非常普遍。然而,U盤的不當使用也給企業數據安全帶來了巨大風險。為了防止數據泄露和病毒傳播,企業需要采取有效的軟件解決方案來限制U盤的使用。本文將探討…

linux使用dockerCompose腳本化部署鏡像

1.根據實際修改docker-compose.yml文件: version: 3.5 services:#mysql數據庫腳本mysql:image: 鏡像名:版本 #需要查看本地鏡像進行填寫。同下container_name: mysql #容器名,同下restart: alwaysports:- 3306:3306 #第一個3306為主機…

Java中解決跨域的幾種方法

一、 什么是跨域(同源策略) 同源的定義:如果兩個頁面的協議,端口(如果有指定)和主機都相同,則兩個頁面具有相同的源 1,用戶在瀏覽器輸入的URL中包含的協議、域名、端口都完全相同。如果有一項不同&#xf…