
作者:某某白米飯
來源:Python 技術(shù)
網(wǎng)上下載的 pdf 學(xué)習(xí)資料有一些會帶有水印,非常影響閱讀。比如下面的圖片就是在 pdf 文件上截取出來的。
PIL:Python Imaging Library 是 python 上非常強大的圖像處理標(biāo)準(zhǔn)庫,但是只能支持 python 2.7,于是就有志愿者在 PIL 的基礎(chǔ)上創(chuàng)建了支持 python 3的 pillow,并加入了一些新的特性。
pip install pillow
pymupdf 可以用 python 訪問擴展名為*.pdf、.xps、.oxps、.epub、.cbz或*.fb2的文件。還支持了許多流行的圖像格式,包括多頁TIFF圖像。
pip install PyMuPDF
導(dǎo)入需要用到的模塊
from PIL import Image
from itertools import product import fitz import os
pdf 去水印的原理和圖片去水印的原理差不多,小編先從去除上面那張圖片的水印開始。
學(xué)過計算機的小伙伴們都知道 ,計算機中用 RGB 代表紅綠藍,用 (255, 0, 0) 表示紅色,(0, 255, 0) 表示綠色,(0, 0, 255) 表示藍色,(255, 255, 255) 表示白色,(0, 0, 0) 表示黑色,去水印的原理就是將水印的顏色變成白色(255, 255, 255)。
首先獲取圖片寬和高,用 itertools 模塊獲取寬和高的笛卡爾積作為像素點。每個像素點的顏色都由 前三位的 RGB 和 第四位的 Alpha 通道構(gòu)成。Alpha 通道不需要,只要 RGB 數(shù)據(jù)。
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')
示例結(jié)果:
PDF 去水印的原理和圖片去水印的原理大致相同,用 PyMuPDF 打開 pdf 文件后,將 pdf 的每一頁都轉(zhuǎn)換為圖片 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
示例結(jié)果:
圖片轉(zhuǎn) pdf 需要注意的是圖片的排序,數(shù)字文件名必須先轉(zhuǎn)換為 int 類型后排序。用 PyMuPDF 模塊打開圖片后將圖片用 convertToPDF() 函數(shù)轉(zhuǎn)成單頁的 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 面前消失了。小伙伴們學(xué)會了嗎?
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10