PythonのPyMuPDFライブラリを使うと、PDFファイル内の画像を簡単に抽出して保存することができます。
今回は、PyMuPDFを使用してPDFから画像だけを抽出し、個別のファイルとして保存する方法を紹介します。
この方法を使えば、画像の手動抽出作業を自動化し、大幅に時間を節約できます。
大量のPDFデータから画像を抜き取りたいんですが、
何か良い方法はないでしょうか?!
それならPythonでPyMuPDFというライブラリを使ってみてください!
スクショで画像を保存しなくても効率よく画像を保存できますよ!
初心者でもわかるように使い方を説明した上で応用例も紹介します!
1. PyMuPDFとは?
PyMuPDF(別名:fitz)は、PythonでPDFやその他のドキュメント(ePub、XPSなど)を処理するためのライブラリです。
このライブラリを使うことで、PDFからの画像やテキストの抽出、ページの分割・結合、メタデータの取得など、さまざまな操作が可能になります。
特にPDF内の画像だけを抽出する機能は、画像の収集やデータ処理に便利です。
2. PyMuPDFのインストール
まず、PyMuPDFをインストールしましょう。
以下のコマンドをPython環境で実行します。
pip install PyMuPDF
これで、PDFファイルの読み込みと画像抽出ができるようになります。
3. PDFから画像を抽出する手順
PyMuPDFを使ったPDF内の画像抽出は、以下の手順で行います。
- PDFファイルの読み込み:
fitz.open()
でPDFを読み込みます。 - ページのループ処理:各ページを1ページずつ処理し、画像を検索します。
- 画像の抽出:
get_page_images()
メソッドを使い、各ページ内の画像情報を取得します。 - 画像の保存:取得した画像データを、個別のファイルとして保存します。
4. サンプルコード:PDF内の画像を一括抽出・保存
次に、PyMuPDFを使ってPDFから画像を抽出・保存するサンプルコードを紹介します。
PDF内のすべてのページを処理し、各画像をPNG形式で保存します。
import fitz # PyMuPDFの別名がfitzです
import io
from PIL import Image
# PDFファイルのパスを指定
pdf_path = "sample.pdf"
# PDFを開く
doc = fitz.open(pdf_path)
# PDF内の画像をすべて抽出
for page_num in range(doc.page_count):
page = doc.load_page(page_num) # ページを読み込む
image_list = page.get_images(full=True) # ページ内の画像を取得
# 各画像を処理
for img_index, img in enumerate(image_list):
xref = img[0] # 画像の参照番号
base_image = doc.extract_image(xref) # 画像データを取得
image_bytes = base_image["image"] # 画像のバイトデータ
image = Image.open(io.BytesIO(image_bytes)) # PILで画像データを開く
# 画像をファイルとして保存
image_name = f"page{page_num + 1}_img{img_index + 1}.png"
image.save(image_name)
print(f"画像を保存しました: {image_name}")
# ドキュメントを閉じる
doc.close()
コードの詳細解説
fitz.open(pdf_path)
:
指定したパスのPDFファイルを読み込みます。doc.load_page(page_num)
:
ページ番号を指定してページを読み込みます。page.get_images(full=True)
:
指定ページ内のすべての画像情報を取得します。doc.extract_image(xref)
:
画像の参照番号xref
を使って画像データを取得します。Image.open(io.BytesIO(image_bytes))
:PIL
を使用して画像を開きます。image.save(image_name)
:
指定したファイル名で画像をPNG形式で保存します。
5. 応用例:テキストやメタデータの抽出
PyMuPDFは、画像の抽出だけでなく、PDF内のテキストやメタデータを抽出することも可能です。
以下に、テキストとメタデータの抽出方法を紹介します。
テキストの抽出
PDF内のテキストを抽出するには、get_text()
メソッドを使用します。
# PDF内の全ページのテキストを抽出
for page_num in range(doc.page_count):
page = doc.load_page(page_num)
text = page.get_text("text")
print(f"ページ {page_num + 1} のテキスト:\n{text}")
メタデータの取得
PDFのメタデータ(タイトル、作成日、作者など)を取得するには、以下のコードを使用します。
# PDFのメタデータを取得
metadata = doc.metadata
print("メタデータ情報:")
for key, value in metadata.items():
print(f"{key}: {value}")
6. まとめ
今回の記事では、PythonのPyMuPDFライブラリを使って、PDF内の画像を自動で抽出し、ファイルとして保存する方法を紹介しました。
PyMuPDFは画像の抽出だけでなく、テキストやメタデータの抽出、ページの結合や分割といった多彩な機能を持つ強力なツールです。
特に大量のPDFファイルから画像を自動収集したい場合や、データ分析の前処理としてPDFから画像やテキストを効率よく取り出したい場合に役立ちます。
ぜひ活用してみてください!
このサイトのトップページへは以下へアクセス!
コメント