成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Python 去除 PDF 水印,你學會嗎?

開發 后端
今天介紹下用 Python 去除 PDF (圖片)的水印。思路很簡單,代碼也很簡潔。

[[436897]]

今天介紹下用 Python 去除 PDF (圖片)的水印。思路很簡單,代碼也很簡潔。

首先來考慮 Python 如何去除圖片的水印,然后再將思路復用到 PDF 上面。

這張圖片是前幾天整理《數據結構和算法》PDF里的一個截圖,帶著公眾號的水印。

從上圖可以明顯看到,為了不影響閱讀正文,水印顏色一般比較淺。因此,我們可以利用顏色差這個特征來去掉水印。即:用 Python 讀取圖片的顏色,并將淺顏色部分變白。

Python 標準庫 PIL 可以獲取圖片的顏色,Python2 是系統自帶的,Python3 需要自己安裝,我用的 Python 3.8,需要執行以下命令安裝

  1. pip install pillow 

安裝完成,讀取圖片,并獲取圖片的尺寸(寬度和高度)

  1. from PIL import Image 
  2.  
  3. img = Image.open('watermark_pic.png'
  4.  
  5. width, height = img.size 

進行下一步之前,先簡單介紹下計算機里關于顏色的知識。光學三原色是紅綠藍(RGB),也就是說它們是不可分解的三種基本顏色,其他顏色都可以通過這三種顏色混合而成,三種顏色等比例混合就是白色,沒有光就是黑色。

在計算機中,可以用三個字節表示 RGB 顏色,1個字節能表示的最大數值是 255, 所以,(255, 0, 0)代表紅色,(0, 255, 0)代表綠色,(0, 0, 255)代表藍色。相應地,(255, 255, 255)代表白色,(0, 0, 0)代表黑色。從(0, 0, 0) ~ (255, 255, 255) 之間的任意組合都可以代表一個不同的顏色。

接下來我們可以通過下面代碼讀取圖片的 RGB

  1. for i in range(width): 
  2.     for j in range(height): 
  3.         pos = (i, j) 
  4.         print(img.getpixel(pos)[:3]) 

圖片每個位置顏色由四元組表示,前三位分別是 RGB,第四位是 Alpha 通道,我們不需要關心。

有了 RGB ,我們就可以對其修改。

從圖中可以發現,水印的 RGB 是 #d9d9d9,這里是用十六進制表示的,其實就是(217, 217, 217)。

這三個顏色值都越靠近 255,顏色就越淡,當它們都變成 255,也就成了白色。所以只要 RGB 都大于 217 的位置,我們都可以給它填成白色。即:RGB 三位數之和大于等于 651。

  1. if sum(img.getpixel(pos)[:3]) >= 651: 
  2.  
  3. img.putpixel(pos, (255, 255, 255)) 

完整代碼如下:

  1. from PIL import Image 
  2.  
  3. img = Image.open('watermark_pic.png'
  4. width, height = img.size 
  5.  
  6. for i in range(width): 
  7.     for j in range(height): 
  8.         pos = (i, j) 
  9.         if sum(img.getpixel(pos)[:3]) >= 651: 
  10.             img.putpixel(pos, (255, 255, 255)) 
  11.  
  12. img.save('watermark_removed_pic.png'

有了上面的基礎,去除 PDF 的水印就簡單了,思路是將每頁 PDF 轉成圖片,然后修改水印的 RGB,最后輸出圖片即可。

安裝 pymupdf 庫,用來來操作 PDF

  1. pip install pymupdf 

讀取 PDF,并轉圖片

  1. import fitz 
  2.  
  3.  
  4. doc = fitz.open("數據結構和算法手冊@公眾號渡碼.pdf"
  5.  
  6. for page in doc: 
  7.     pix = page.get_pixmap() 

該 PDF 共 480 頁,所以需要遍歷每一頁,并獲取每一頁對應的圖片pix。pix對象類似于我們上面看到的img對象,可以讀取、修改它的 RGB。

page.get_pixmap() 這個操作是不可逆的,即能夠實現從 PDF 到圖片的轉換,但修改圖片 RGB 后無法應用到 PDF 上,只能輸出為圖片。

修改水印 RGB 跟剛才一樣,區別是這里的 RGB 是一個三元組,沒有 Alpha 通道,代碼如下:

  1. from itertools import product 
  2.  
  3. for pos in product(range(pix.width), range(pix.height)): 
  4.     if sum(pix.pixel(pos[0], pos[1])) >= 651: 
  5.         pix.set_pixel(pos[0], pos[1], (255, 255, 255)) 

完整代碼如下:

  1. from itertools import product 
  2.  
  3. import fitz 
  4.  
  5. doc = fitz.open("數據結構和算法手冊@公眾號渡碼.pdf"
  6.  
  7. page_no = 0 
  8.  
  9. for page in doc: 
  10.  
  11. pix = page.get_pixmap() 
  12.  
  13. for pos in product(range(pix.width), range(pix.height)): 
  14.  
  15. if sum(pix.pixel(pos[0], pos[1])) >= 651: 
  16.  
  17. pix.set_pixel(pos[0], pos[1], (255, 255, 255)) 
  18.  
  19. pix.pil_save(f"pdf_pics/page_{page_no}.png", dpi=(30000, 30000)) 
  20.  
  21. print(f'第 {page_no} 頁去除完成'
  22.  
  23. page_no += 1 

這種方案是有缺點的,第一,輸出并非 PDF 格式;第二,輸出的圖片比較模糊,后續還有待優化,最好是能直接修改 PDF。

完整代碼回復關鍵詞 gp,找great-programmer/python/python項目/去除水印目錄。

PDF 源文件在great-programmer/數據結構與算法/ 目錄。

本文轉載自微信公眾號「渡碼」,可以通過以下二維碼關注。轉載本文請聯系渡碼公眾號。

 

 

責任編輯:武曉燕 來源: 渡碼
相關推薦

2022-03-14 09:39:06

PythonPDF圖片

2024-08-01 08:37:46

vue圖片性能

2022-02-24 09:22:52

領域驅動成本

2023-10-26 12:00:28

Python答題卡識別

2011-08-31 13:55:38

PDF去水印

2023-05-05 08:23:29

單測編程語言

2022-02-22 09:16:41

AndroidWindows狀態欄

2022-02-09 23:02:53

Vuex開發管理模式

2023-11-26 18:35:25

Python編程語言

2022-05-04 18:26:25

PDF水印Python

2022-03-08 08:39:22

gRPC協議云原生

2022-11-21 10:28:13

FlutterPython

2024-09-26 09:10:08

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:14:13

業務項目技術

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-05-19 07:31:48

2023-06-28 11:01:08

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲天堂 | 91色视频在线 | 中文视频在线 | 欧美在线 | 小h片免费观看久久久久 | 黄片毛片免费观看 | av在线天天 | 精品日韩一区二区 | 99爱免费| 波多野结衣中文视频 | 国产精品久久久久久久久久免费 | 亚洲国产精品网站 | 亚洲第一女人av | 欧美日一区二区 | 日韩电影一区 | 91 在线 | 中文字幕日本一区二区 | 久久精品av | 欧美精品一区二区三区在线播放 | 欧美日韩国产精品 | 亚洲中午字幕 | 久久久久中文字幕 | 亚洲三级在线 | 99精品99 | 国产精品99久 | 亚洲欧美在线一区 | 久久草在线视频 | 欧美极品在线视频 | yiren22综合网成人 | 久久久妇女国产精品影视 | 久久久久久网站 | 一区二区三区免费在线观看 | 欧美日韩综合精品 | 蜜臀网站 | 日韩一区二区成人 | 激情五月婷婷丁香 | 久久精品国产久精国产 | 日韩综合| 免费毛片网站 | 伦理午夜电影免费观看 | 国产免费黄网 |