ホームページ  >  記事  >  バックエンド開発  >  超シンプル! Python を使用して画像と PDF から透かしを削除する

超シンプル! Python を使用して画像と PDF から透かしを削除する

WBOY
WBOY転載
2023-04-12 23:43:012149ブラウズ

超シンプル! Python を使用して画像と PDF から透かしを削除する

オンラインでダウンロードした一部の PDF 学習教材には透かしが入っており、読むのに大きな影響を与えます。たとえば、下の図は pdf ファイルから切り出したものですが、今日は Python を使ってこの問題を解決してみます。

超シンプル! Python を使用して画像と PDF から透かしを削除する

インストール モジュール

PIL: Python Imaging Library は、Python 上の非常に強力な画像処理標準ライブラリですが、Python 2.7 のみをサポートしているため、ボランティア 著者は、PIL に基づいて Python 3 をサポートする枕を作成し、いくつかの新機能を追加しました。

pip install pillow

pymupdf Python を使用して、拡張子が *.pdf、.xps、.oxps、.epub、.cbz、または *.fb2 のファイルにアクセスできます。複数ページの TIFF 画像など、多くの一般的な画像形式もサポートされています。

pip install PyMuPDF

必要なモジュールをインポートします

from PIL import Image
from itertools import product
import fitz
import os

画像の RGB を取得します

pdf 透かし除去の原理は、画像の透かし除去の原理と似ています。エディターは最初に透かしを除去します。上記の画像の透かしから始めます。

コンピュータを勉強したことがある人なら誰でも、コンピュータで赤、緑、青を表すのに RGB が使用され、赤を表すのに (255, 0, 0) が使用され、赤を表すのに (0, 255, 0) が使用されることを知っています。緑、(0, 0 , 255) は青、(255, 255, 255) は白、(0, 0, 0) は黒を表します。ウォーターマーク除去の原理は、ウォーターマークの色を白 (255, 255, 255) に変更することです。 255、255)。

まず画像の幅と高さを取得し、itertools モジュールを使用して幅と高さのデカルト積をピクセルとして取得します。各ピクセルの色は、RGB の最初の 3 ビットとアルファ チャネルの 4 番目のビットで構成されます。アルファ チャネルは必要ありません。RGB データのみが必要です。

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)

写真からウォーターマークを削除する

WeChat スクリーンショットを使用して、ウォーターマーク ピクセルの RGB を確認します。

超シンプル! Python を使用して画像と PDF から透かしを削除する

ウォーターマークの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')

結果の例:

超シンプル! Python を使用して画像と PDF から透かしを削除する

PDF 透かし除去

PDF 透かし除去の原理は、画像の透かし除去の原理とほぼ同じです。 PyMuPDF を使用します PDF ファイルを開いた後、PDF の各ページをピックスマップ画像に変換します。ピックスマップには独自の 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

結果の例:

超シンプル! Python を使用して画像と PDF から透かしを削除する

画像を PDF に変換

画像を PDF に変換画像の順序、数値ファイル名は、最初に int 型に変換してからソートする必要があります。 PyMuPDF モジュールで画像を開いた後、convertToPDF() 関数を使用して画像を単一ページの 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 の前でついに消えることができます。皆さんは十分に勉強しましたか?

以上が超シンプル! Python を使用して画像と PDF から透かしを削除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。