日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。

發(fā)布時(shí)間:2023/12/9 python 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

10行代碼給pdf文件去水印

  • 1、引言
  • 2、代碼實(shí)戰(zhàn)
    • 2.1 去除原理
    • 2.2 代碼解析
    • 2.3 代碼整合
  • 3、總結(jié)

1、引言

小屌絲:魚(yú)哥,最近有點(diǎn)不像話了。
小魚(yú):嗯?? 啥個(gè)意思嘛~
小屌絲:一周了,沒(méi)分享小知識(shí)了。
小魚(yú):就因?yàn)檫@個(gè)??
小屌絲:那是,我這么愛(ài)學(xué)習(xí)的人。
小魚(yú):怕是你有什么事情解決不了,想到我了吧?
小屌絲:呵 ~ 笑話 ~ 我 能有…什…么…事情…
小魚(yú):說(shuō)吧,
小屌絲:這可是你讓我說(shuō)的,我可沒(méi)主動(dòng)要問(wèn)的!
小魚(yú):說(shuō)吧,咋還磨磨唧唧了呢
小屌絲:我在某站下載的pfd文檔,有水印,如何去掉啊?
小魚(yú):我突然想起來(lái),PPT還沒(méi)寫(xiě)完。
小屌絲:我家樓下剛開(kāi)一個(gè)燒烤店,據(jù)說(shuō)還不錯(cuò)!
小魚(yú):PPT寫(xiě)不完,可以晚上寫(xiě),助人為樂(lè)讓我更快樂(lè)。

2、代碼實(shí)戰(zhàn)

在上一篇博文,我們知道了如何給pdf文檔添加水印,
而本篇,我們就給pdf去水印

如果不知道如何添加水印,就看這篇:《Python3,2段代碼,給pdf文件添加水印,原來(lái)watermark還可以這么玩。

小屌絲:你這添加完水印,又去除水印,你這是鬧哪樣??
小魚(yú):我喜歡,我稀罕,我樂(lè)意!!

2.1 去除原理

去除方法

  • 1、用 PyMuPDF 打開(kāi) pdf 文件,將 pdf 的每一頁(yè)都轉(zhuǎn)換為圖片 pixmap,
  • 2、pixmap 有它自己的 RGB,只需要將 pdf 水印中的 RGB 改為(255, 255, 255),并保存圖片
  • 3、按照生成的圖片,插入到pdf文檔中

因?yàn)閜fd文檔無(wú)法直接去除水印,需要先將pfd文檔轉(zhuǎn)換成圖片,在逐一對(duì)圖片進(jìn)行水印去除操作,最后在把圖片插入到pdf文檔中

2.2 代碼解析

1、先查看PDF文檔中的水印rgb值是多少
可以看到,RGB(179,179,179),因?yàn)檫@里要的是RGB色值總和,所以我們就認(rèn)為,超過(guò)510,就認(rèn)為是水印。

敲黑板

  • 光學(xué)三原色是紅綠藍(lán)(RGB),也就是說(shuō)它們是不可分解的三種基本顏色,其他顏色都可以通過(guò)這三種顏色混合而成,三種顏色等比例混合就是白色,沒(méi)有光就是黑色。
  • 在計(jì)算機(jī)中,可以用三個(gè)字節(jié)表示 RGB 顏色,1個(gè)字節(jié)能表示的最大數(shù)值是 255, 所以,(255, 0, 0)代表紅色,(0, 255, 0)代表綠色,(0, 0, 255)代表藍(lán)色。相應(yīng)地,(255, 255, 255)代表白色,(0, 0, 0)代表黑色。從(0, 0, 0) ~ (255, 255, 255) 之間的任意組合都可以代表一個(gè)不同的顏色。
  • 圖片每個(gè)位置顏色由四元組表示,前三位分別是 RGB,第四位是 Alpha 通道

2、pdf轉(zhuǎn)換成圖片,并去除水印
代碼示例

# -*- coding:utf-8 -*- # @Time : 2022-02-23 # @Author : carl_DJfrom PIL import Image from itertools import product import fitz# 去除pdf的水印 def remove_pdfwatermark():#打開(kāi)源pfd文件pdf_file = fitz.open("跟小魚(yú)學(xué)習(xí)去水印.pdf")#page_no 設(shè)置為0page_no = 0#page在pdf文件中遍歷for page in pdf_file:#獲取每一頁(yè)對(duì)應(yīng)的圖片pix (pix對(duì)象類似于我們上面看到的img對(duì)象,可以讀取、修改它的 RGB)#page.get_pixmap() 這個(gè)操作是不可逆的,即能夠?qū)崿F(xiàn)從 PDF 到圖片的轉(zhuǎn)換,但修改圖片 RGB 后無(wú)法應(yīng)用到 PDF 上,只能輸出為圖片pix = page.get_pixmap()#遍歷圖片中的寬和高,如果像素的rgb值總和大于510,就認(rèn)為是水印,轉(zhuǎn)換成255,255,255-->即白色for pos in product(range(pix.width), range(pix.height)):if sum(pix.pixel(pos[0], pos[1])) >= 510:pix.set_pixel(pos[0], pos[1], (255, 255, 255))#保存去掉水印的截圖pix.pil_save(f"./{page_no}.png", dpi=(30000, 30000))#打印結(jié)果print(f'第 {page_no} 頁(yè)去除完成')page_no += 1if __name__ == '__main__':remove_pdfwatermark()

執(zhí)行完成,
查看生成圖片:

查看圖片內(nèi)容:

3、圖片轉(zhuǎn)為pdf

代碼示例

# -*- coding:utf-8 -*- # @Time : 2022-02-23 # @Author : carl_DJfrom PIL import Image from itertools import product import fitz''' 圖片轉(zhuǎn)為pdf''' #圖片所在的文件夾 pic_dir = 'D:\Project\watemark'pdf = fitz.open() #圖片數(shù)字文件先轉(zhuǎn)換成int類型進(jìn)行排序 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)#將打開(kāi)后的圖片轉(zhuǎn)成單頁(yè)pdfpdfbytes = imgdoc.convertToPDF()imgpdf = fitz.open("pdf", pdfbytes)#將單頁(yè)pdf插入到新的pdf文檔中pdf.insertPDF(imgpdf) pdf.save("跟小魚(yú)學(xué)習(xí)去水印_完成.pdf") pdf.close()

執(zhí)行代碼,
查看生成的pdf文檔

2.3 代碼整合

上面的內(nèi)容都了解以后,我們就整合代碼,直接運(yùn)行就可以了。

# -*- coding:utf-8 -*- # @Time : 2022-02-23 # @Author : carl_DJfrom PIL import Image from itertools import product import fitz# 去除pdf的水印 def remove_pdfwatermark():#打開(kāi)源pfd文件pdf_file = fitz.open("跟小魚(yú)學(xué)習(xí)去水印.pdf")#page_no 設(shè)置為0page_no = 0#page在pdf文件中遍歷for page in pdf_file:#獲取每一頁(yè)對(duì)應(yīng)的圖片pix (pix對(duì)象類似于我們上面看到的img對(duì)象,可以讀取、修改它的 RGB)#page.get_pixmap() 這個(gè)操作是不可逆的,即能夠?qū)崿F(xiàn)從 PDF 到圖片的轉(zhuǎn)換,但修改圖片 RGB 后無(wú)法應(yīng)用到 PDF 上,只能輸出為圖片pix = page.get_pixmap()#遍歷圖片中的寬和高,如果像素的rgb值總和大于510,就認(rèn)為是水印,轉(zhuǎn)換成255,255,255-->即白色for pos in product(range(pix.width), range(pix.height)):if sum(pix.pixel(pos[0], pos[1])) >= 510:pix.set_pixel(pos[0], pos[1], (255, 255, 255))#保存去掉水印的截圖pix.pil_save(f"./{page_no}.png", dpi=(30000, 30000))#打印結(jié)果print(f'第 {page_no} 頁(yè)去除完成')page_no += 1#去除的pdf水印添加到pdf文件中 def pictopdf():#水印截圖所在的文件夾# pic_dir = input("請(qǐng)輸入圖片文件夾路徑:")pic_dir = 'D:\Project\watemark'pdf = fitz.open()#圖片數(shù)字文件先轉(zhuǎn)換成int類型進(jìn)行排序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)#將打開(kāi)后的圖片轉(zhuǎn)成單頁(yè)pdfpdfbytes = imgdoc.convertToPDF()imgpdf = fitz.open("pdf", pdfbytes)#將單頁(yè)pdf插入到新的pdf文檔中pdf.insertPDF(imgpdf)pdf.save("跟小魚(yú)學(xué)習(xí)去水印_完成.pdf")pdf.close()if __name__ == '__main__':remove_pdfwatermark()pictopdf()

3、總結(jié)

寫(xiě)到這里,今天的分享就差不多快結(jié)束了。
需要理解的流程是,

  • pdf文檔需要先轉(zhuǎn)換成圖片,進(jìn)行水印去除,
  • 再轉(zhuǎn)換成pdf
  • 最后插入到新的pdf文檔中。

關(guān)于圖片及pdf如何添加水印,可以參照小魚(yú)的這兩篇博文:

  • Python3,2行代碼添加水印
  • Python3,2段代碼,給pdf文件添加水印

關(guān)注小魚(yú)博客,帶你了解更多更有趣python知識(shí)。

總結(jié)

以上是生活随笔為你收集整理的Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。