摘要
本文介紹了如何使用 Python 中的 PyMuPDF 和 OpenCV 庫來從 PDF 文件中移除水印,并將每個頁面保存為圖像文件的方法。我們將深入探討代碼背后的工作原理,并提供一個簡單的使用示例。
導言
- 簡介:水印在許多 PDF 文件中都很常見,但有時它們可能會干擾文檔的可讀性或美觀性。本文將介紹一種利用 Python 編程語言移除 PDF 水印的方法。
- 目標:本文將介紹一個使用 PyMuPDF 和 OpenCV 庫的 Python 腳本,該腳本可以自動化地將 PDF 文件中(原文件)水印移除,并將每個頁面保存為單獨的圖像文件,然后合成為新的PDF。
背景知識
- PyMuPDF:PyMuPDF 是一個 Python 綁定庫,用于與 MuPDF(一款用于解析和渲染 PDF 文件的開源軟件)進行交互。
- OpenCV:OpenCV 是一個開源計算機視覺庫,提供了許多用于圖像處理和計算機視覺任務的功能。
技術細節
-
remove_watermark 函數
- 將圖像轉換為 OpenCV 格式。
- 使用顏色閾值技術尋找特定顏色范圍內的水印區域。
- 進行膨脹和侵蝕操作以改善水印去除效果。
- 將圖像轉換回 PIL 格式并返回處理后的圖像。
-
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 官方文檔:鏈接