python為圖片和PDF去水印詳解
網(wǎng)上下載的 pdf 學(xué)習(xí)資料有一些會(huì)帶有水印,非常影響閱讀。比如下面的圖片就是在 pdf 文件上截取出來(lái)的。
安裝模塊
PIL:Python Imaging Library 是 python 上非常強(qiáng)大的圖像處理標(biāo)準(zhǔn)庫(kù),但是只能支持 python 2.7,于是就有志愿者在 PIL 的基礎(chǔ)上創(chuàng)建了支持 python 3的 pillow,并加入了一些新的特性。
pip?install?pillow
pymupdf 可以用 python 訪問(wèn)擴(kuò)展名為*.pdf、.xps、.oxps、.epub、.cbz或*.fb2的文件。還支持了許多流行的圖像格式,包括多頁(yè)TIFF圖像。
pip?install?PyMuPDF
導(dǎo)入需要用到的模塊
from PIL import Image from itertools import product import fitz import os
獲取圖片的 RGB
pdf 去水印的原理和圖片去水印的原理差不多,小編先從去除上面那張圖片的水印開(kāi)始。
學(xué)過(guò)計(jì)算機(jī)的小伙伴們都知道 ,計(jì)算機(jī)中用 RGB 代表紅綠藍(lán),用 (255, 0, 0) 表示紅色,(0, 255, 0) 表示綠色,(0, 0, 255) 表示藍(lán)色,(255, 255, 255) 表示白色,(0, 0, 0) 表示黑色,去水印的原理就是將水印的顏色變成白色(255, 255, 255)。
首先獲取圖片寬和高,用 itertools 模塊獲取寬和高的笛卡爾積作為像素點(diǎn)。每個(gè)像素點(diǎn)的顏色都由 前三位的 RGB 和 第四位的 Alpha 通道構(gòu)成。Alpha 通道不需要,只要 RGB 數(shù)據(jù)。
def remove_img(): image_file = input("請(qǐng)輸入圖片地址:") img = Image.open(image_file) width, height = img.size for pos in product(range(width), range(height)): rgb = img.getpixel(pos)[:3] print(rgb)
圖片去水印
用微信截圖的方式查看水印像素點(diǎn)的 RGB。
可以看到水印的 RGB 是 (210, 210, 210),這里用 RGB 的和超過(guò) 620 就判定是水印點(diǎn),此時(shí)將像素顏色替換為白色。最后保存圖片。
rgb = img.getpixel(pos)[:3] if(sum(rgb) >= 620): img.putpixel(pos, (255, 255, 255)) img.save('d:/qsy.png')
示例結(jié)果:
PDF 去水印
PDF 去水印的原理和圖片去水印的原理大致相同,用 PyMuPDF 打開(kāi) pdf 文件后,將 pdf 的每一頁(yè)都轉(zhuǎn)換為圖片 pixmap,pixmap 有它自己的 RGB,只需要將 pdf 水印中的 RGB 改為(255, 255, 255) 最后保存為圖片。
def remove_pdf(): page_num = 0 pdf_file = input("請(qǐng)輸入 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
圖片轉(zhuǎn) pdf 需要注意的是圖片的排序,數(shù)字文件名必須先轉(zhuǎn)換為 int 類型后排序。用 PyMuPDF 模塊打開(kāi)圖片后將圖片用 convertToPDF() 函數(shù)轉(zhuǎn)成單頁(yè)的 pdf。插入到新的 pdf 文件中。
def pic2pdf(): pic_dir = input("請(qǐng)輸入圖片文件夾路徑:") 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()
總結(jié)
pdf 和圖片上惱人的水印終于可以在強(qiáng)大的 python 面前消失了。小伙伴們學(xué)會(huì)了嗎?
到此這篇關(guān)于python為圖片和PDF去水印詳解的文章就介紹到這了,更多相關(guān)python圖片和PDF去水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django中F表達(dá)式和Q函數(shù)應(yīng)用與原理詳解
F對(duì)象查詢與Q對(duì)象查詢,剛看到大家一定會(huì)感到很陌生,其實(shí)它們也是 Django 提供的查詢方法,而且非常的簡(jiǎn)單的高效,下面這篇文章主要給大家介紹了關(guān)于django中F表達(dá)式和Q函數(shù)應(yīng)用與原理的相關(guān)資料,需要的朋友可以參考下2023-05-05使用Pyinstaller的最新踩坑實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了最近在使用Pyinstaller的踩坑實(shí)戰(zhàn)記錄,主要介紹了PYTHON2X.DLL缺失和WINDOWS2003 32BIT提示程序無(wú)效這兩個(gè)問(wèn)題的解決方法,文中給出了詳細(xì)的解決方法,需要的朋友們下面來(lái)一起看看吧。2017-11-11Pycharm在指定目錄下生成文件和刪除文件的實(shí)現(xiàn)
這篇文章主要介紹了Pycharm在指定目錄下生成文件和刪除文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12在matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)方式
這篇文章主要介紹了在matlab中創(chuàng)建類似字典的數(shù)據(jù)結(jié)構(gòu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03用Python程序抓取網(wǎng)頁(yè)的HTML信息的一個(gè)小實(shí)例
這篇文章主要介紹了用Python程序抓取網(wǎng)頁(yè)的HTML信息的一個(gè)小實(shí)例,用到的方法同時(shí)也是用Python編寫爬蟲的基礎(chǔ),需要的朋友可以參考下2015-05-05使用python?matplotlib畫折線圖實(shí)例代碼
Matplotlib是一個(gè)Python工具箱,用于科學(xué)計(jì)算的數(shù)據(jù)可視化,下面這篇文章主要給大家介紹了關(guān)于如何使用python?matplotlib畫折線圖的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python流行ORM框架sqlalchemy的簡(jiǎn)單使用
這篇文章主要介紹了Python流行ORM框架sqlalchemy的簡(jiǎn)單使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07分享Python開(kāi)發(fā)中要注意的十個(gè)小貼士
不管是python開(kāi)發(fā)還是其他什么語(yǔ)言的開(kāi)發(fā),如果在開(kāi)發(fā)中我們能掌握一些有用的貼士和技巧,那么肯定會(huì)大大提高我們的開(kāi)發(fā)效率,今天小編和大家分享的就是python開(kāi)發(fā)中,一些初學(xué)這門語(yǔ)言常常會(huì)犯的錯(cuò)誤,一起來(lái)看看吧。2016-08-08