pythonの3つの方法はpdfの中の写真を抽出します。
時には一つ以上のPDFファイルの中の写真を抽出しなければなりません。オンラインのウェブサイトを使って実現すれば、写真の漏えいが心配されます。手動で操作するのは面倒です。実はPythonを使っても簡単に解決できます。
今日はみんなのシステムといくつかのPythonを共有してPDF画像を抽出する方法です。実際には非常に完璧な方法はありません。各方法の抽出効率は100%ではないので、様々な方法で補完することが考えられます。は、 を検索する。は、
fitzライブラリと正則に基づいて検索します。
fitzはpymupdfのサブモジュールです。コマンドラインでpymupdfをインストールする必要があります。
下のコードは
いくつかの小さな色の塊が写真に抽出されているのが見えますが、どうやってフィルタリングしますか?
簡単な方法があります。大きさフィルタリングによって、pix画素はfitzライブラリに重要な方法があります。pix.sizeはピクセルの数を反映できます。簡単な色素ブロックはこの値が低いので、閾値を設定してフィルタリングすることができます。閾値10000を例にしてフィルタリングする:
すべての画像が正常に抽出されているのが見えます。
pdf 2 imageライブラリに基づく二つの方法
名前を見ると、このライブラリの役割が分かります。公式文書はhttps://www.cnpython.com/pypi/pdf2imageです。
簡単に windowsユーザは にbin/フォルダを追加しなければなりません。 Macユーザーは
具体的に機能するコードの公式文書にも詳細な説明があります。
この二つの方法をそれぞれ試してみましょう。
結果は以前と一致しています。PDFの全画像が抽出されます。
もうちょっと補充します。コア方法
パラメータ
意味
pdf_パス
PDF文書パス
dpi
画像の品質(学術雑誌なら300 dpiがよくあります)
out put_フォルダー
生成した画像を直接メモリに書き込む代わりにフォルダに書き込みます。
first_page
開始ページ数
ラスター.page
どのページに変換しますか
fmt
画像フォーマットは、pngに指定できます。デフォルトはppmです。
スリーロード.count
変換に参加するスレッド数を許可します。
userpw
PDFのパスワード
out put_file
出力ファイル名
poppler_パス
popplerのインストール経路を指定します。最初に配置したら指定する必要はありません。
これに値するのは
以上がpythonの3つの方法です。pdfの中の写真の詳細を抽出します。pythonのpdfの中の写真を抽出する資料については、他の関連記事に注目してください。
今日はみんなのシステムといくつかのPythonを共有してPDF画像を抽出する方法です。実際には非常に完璧な方法はありません。各方法の抽出効率は100%ではないので、様々な方法で補完することが考えられます。
fitz
ライブラリと正規検索に基づいて、抽出画像pdf2image
ライブラリの2つの方法に基づいて画像を抽出する。fitzはpymupdfのサブモジュールです。コマンドラインでpymupdfをインストールする必要があります。
pip install pymupdf
ただし、導入時はimport fitz
を使ってモジュールを導入してください。下のコードは
fitz
ライブラリを利用して画像を抽出するために正則で画像要素に一致し、テンプレート要素をピクセルに変換してから画像形式で書き出す必要があります。
import fitz
import re
import os
file_path = r'C:\xxx\xxx.pdf' # PDF
dir_path = r'C:\xxx' #
def pdf2image1(path, pic_path):
checkIM = r"/Subtype(?= */Image)"
pdf = fitz.open(path)
lenXREF = pdf._getXrefLength()
count = 1
for i in range(1, lenXREF):
text = pdf._getXrefString(i)
isImage = re.search(checkIM, text)
if not isImage:
continue
pix = fitz.Pixmap(pdf, i)
new_name = f"img_{count}.png"
pix.writePNG(os.path.join(pic_path, new_name))
count += 1
pix = None
pdf2image1(file_path, dir_path)
サンプルファイルを実行した結果、以下のようになりました。いくつかの小さな色の塊が写真に抽出されているのが見えますが、どうやってフィルタリングしますか?
簡単な方法があります。大きさフィルタリングによって、pix画素はfitzライブラリに重要な方法があります。pix.sizeはピクセルの数を反映できます。簡単な色素ブロックはこの値が低いので、閾値を設定してフィルタリングすることができます。閾値10000を例にしてフィルタリングする:
import fitz
import re
import os
file_path = r'C:\xxx\xxx.pdf' # PDF
dir_path = r'C:\xxx' #
def pdf2image1(path, pic_path):
checkIM = r"/Subtype(?= */Image)"
pdf = fitz.open(path)
lenXREF = pdf._getXrefLength()
count = 1
for i in range(1, lenXREF):
text = pdf._getXrefString(i)
isImage = re.search(checkIM, text)
if not isImage:
continue
pix = fitz.Pixmap(pdf, i)
if pix.size < 10000: #
continue #
new_name = f"img_{count}.png"
pix.writePNG(os.path.join(pic_path, new_name))
count += 1
pix = None
pdf2image1(file_path, dir_path)
すべての画像が正常に抽出されているのが見えます。
pdf 2 imageライブラリに基づく二つの方法
名前を見ると、このライブラリの役割が分かります。公式文書はhttps://www.cnpython.com/pypi/pdf2imageです。
簡単に
pip install pdf2image
でインストールすることができますが、popplerは本当に使いやすい変換器ですので、追加の設置と構成が必要です。poppler for Windows
をインストールしてからPATH poppler for Mac
をインストールしなければなりません。この二つの方法をそれぞれ試してみましょう。
from pdf2image import convert_from_path,convert_from_bytes
import tempfile
from pdf2image.exceptions import PDFInfoNotInstalledError, PDFPageCountError, PDFSyntaxError
import os
file_path = r'C:\xxx\xxx.pdf' # PDF
dir_path = r'C:\xxx' #
def pdf2image2(file_path, dir_path):
images = convert_from_path(file_path, dpi=200)
for image in images:
if not os.path.exists(dir_path):
os.makedirs(dir_path)
image.save(file_path + f'\img_{images.index(image)}.png', 'PNG')
pdf2image2(file_path, dir_path)
画像の抽出に成功しました。第二の方法を試してみます。
from pdf2image import convert_from_path,convert_from_bytes
import tempfile
from pdf2image.exceptions import PDFInfoNotInstalledError, PDFPageCountError, PDFSyntaxError
import os
file_path = r'C:\xxx\xxx.pdf' # PDF
dir_path = r'C:\xxx' #
def pdf2image3(file_path, dir_path):
images = convert_from_bytes(open(file_path, 'rb').read())
for image in images:
if not os.path.exists(dir_path):
os.makedirs(dir_path)
image.save(file_path + f'\img_{images.index(image)}.png', 'PNG')
pdf2image3(file_path, dir_path)
結果は以前と一致しています。PDFの全画像が抽出されます。
もうちょっと補充します。コア方法
covert_from_bytes
は、大量のパラメータを含み、自分で修正することができる。いくつかの常用パラメータは以下のようにまとめられています。パラメータ
意味
pdf_パス
PDF文書パス
dpi
画像の品質(学術雑誌なら300 dpiがよくあります)
out put_フォルダー
生成した画像を直接メモリに書き込む代わりにフォルダに書き込みます。
first_page
開始ページ数
ラスター.page
どのページに変換しますか
fmt
画像フォーマットは、pngに指定できます。デフォルトはppmです。
スリーロード.count
変換に参加するスレッド数を許可します。
userpw
PDFのパスワード
out put_file
出力ファイル名
poppler_パス
popplerのインストール経路を指定します。最初に配置したら指定する必要はありません。
これに値するのは
thread_count
パラメータで、マルチスレッドを起動すると、変換速度が大幅に速くなります。特にPDFページが多い場合。興味のある方は試してみてください。以上がpythonの3つの方法です。pdfの中の写真の詳細を抽出します。pythonのpdfの中の写真を抽出する資料については、他の関連記事に注目してください。