PDFから画像を抜き出す総合ガイド
PDFは文書、表、図表、グラフ、イラストなどをまとめる万能ファイルですが、実はその中に埋め込まれた画像を抜き出す作業は「簡単」なだけではありません。特に「複数ページ」「画像が圧縮されている」「画像の形式が変わっている」などの条件が重なると、手探りでの作業は時間がかかり、失敗も多いものです。この記事では、誰でもすぐに実践できる3段階で画像を抽出する方法を紹介し、さらに「品質を保つ」「スクリプトで自動化」など検索者が抱える疑問に答えていきます。
1. まず知っておきたい「PDFに埋め込まれた画像の仕組み」
- ビットマップ画像(JPEG, PNG, GIF)
- 通常のスクリーン上に描画される画像。サイズ・解像度は元の形式に依存。
- ベクタ画像(EPS, WMF)
- いわゆる図形データで、拡大・縮小しても解像度が落ちません。
- 圧縮形式
- JPEG, Flate, CCITT, JBIG2 など。形式によって退化(画質低下)が起こる場合があります。
ポイント
PDFは「文書 + 画像 + ベクタ」を一つのトークンとして扱うため、一般の画像編集ソフトに直接取り込むと「失われた情報」がそのまま残ります。
画像を抜き出す際は、**「画像形式をそのまま」または「解像度を落とさない」**ことを検討しましょう。
2. GUI で最速・最簡単に抜き出す方法
A. Adobe Acrobat Pro DC(有料)
- ファイル > プロパティ > 画像
- PDFに埋め込まれた全画像を一覧表示。クリックで確認・保存が可能。
- ツール > 画像の抽出
- すべての画像を一括で保存。
- 「保存フォルダー」の設定で拡張子も変更可能。
メリット
- 専業編集者としての品質を保証。
- 画像解像度・フォーマットを設定できる。
デメリット
- ライセンス費用が発生。
- 多数ページのPDFでは作業が重くなる可能性。
B. オンラインツール(無料・有料)
| サービス | 特徴 | 一括抽出 | 備考 |
|---|---|---|---|
| Smallpdf | 「PDF 画像抽出」 | ● | 有料版で非圧縮画像取得 |
| ILovePDF | 「PDF 画像抽出」 | ● | 無料枠で回数制限 |
| PDF2Go | 「画像抽出」 | ● | 無料でも十分 |
操作フロー(一般的)
- PDFをアップロード
- 画像抽出ボタンをクリック
- 抽出完了後、Zip形式でダウンロード
注意点
- オンラインに機密PDFをアップロードする際は、セキュリティリスクを確認。
- 大容量PDFはアップロード時間が長くなる。
C. PDF-XChange Editor(無料版可)
- PDFを開く
- 「編集 > 画像の抽出」を選択
- 「すべて抽出」オプションで一括ダウンロード
メリット
- 無料版で十分に使える。
- 画像を選択して一括保存が可能。
3. コマンドラインでの高速抽出(初心者から上級者まで)
| ツール | コマンド例 | 主な特徴 |
|---|---|---|
| pdfimages(Popplerツール) | pdfimages input.pdf output -j |
画像をそのまま抽出、JPEGを保持 |
| ImageMagick | convert input.pdf[0] output.png |
ページ単位でGIF/JPG/PNG変換 |
| Ghostscript | gs -sDEVICE=pngalpha -o out-%03d.png input.pdf |
PNG(透過)で抽出 |
pdfimages の詳細
- JPEG 形式の画像はそのまま(
-jオプション)。- 失われる「ビットマップ以外(カラーパレット等)」は再生成。
- 失敗しやすいケース:PDF内の「画像がベクタである」場合は実行しないとエラー。
# 例:pdfimages で JPEG をそのまま抽出
pdfimages -j document.pdf image
# 例:Ghostscript で PNG(アルファ)を抽出
gs -dNOPAUSE -dBATCH \
-sDEVICE=pngalpha -r300 \
-sOutputFile=page-%03d.png \
document.pdf
3-1. 「画像が圧縮されている」場合の対処
- JPEG で損失をほぼ抑える:
-jを付けると圧縮率が変わらない - Lossless 画像(PNG, BMP):
-pngオプションで無圧縮 PNG を生成 - カラーパレット画像:
-aで透過画像を保持
3-2. 複数ページまとめて抽出と自動フォーマット
# すべてのページから PNG に変換
for i in $(seq 0 $(pdfinfo file.pdf | grep Pages | awk '{print $2}' | sed 's/.$//')); do
convert -density 300 file.pdf[$i] page_$i.png
done
ヒント
-density 300は解像度。高頻度で大きな画像になるので注意。convertは ImageMagick の一部で、インストールが必要。
4. Python で自動化(プログラマ必見)
Python の PDF 画像抽出は、大量画像のバッチ処理やデータベースへの格納に便利です。代表的なライブラリは PyMuPDF、pdfplumber、pdf2image です。
4-1. PyMuPDF(fitz)で画像抽出
import fitz # PyMuPDF
def extract_images(pdf_path, save_dir):
doc = fitz.open(pdf_path)
for page_index in range(len(doc)):
page = doc[page_index]
image_list = page.get_images(full=True)
for img_index, img in enumerate(image_list, start=1):
xref = img[0]
base_image = doc.extract_image(xref)
image_bytes = base_image["image"]
image_ext = base_image["ext"]
image_name = f"page{page_index+1}_img{img_index}.{image_ext}"
with open(os.path.join(save_dir, image_name), "wb") as img_file:
img_file.write(image_bytes)
ポイント
full=Trueで「圧縮されていない本来の画像データ」を取得。page.get_images()はページに埋め込まれたすべての画像を取得。
4-2. pdfplumber でテーブル画像も抜き出し
pdfplumber は主にテキスト抽出ですが、画像領域を取得し、PNG 等へ変換できます。
import pdfplumber
import io
from PIL import Image
page = pdfplumber.open('sample.pdf').pages[0]
for img in page.images:
# 画像データのバイナリを取得
im_bytes = img["im"]
im = Image.open(io.BytesIO(im_bytes))
im.save(f'output_{img["name"]}.png')
注意
- 画像が埋め込まれていない場合(外部リンクのみ)がある。
imがNoneの場合は除外。
4-3. pdf2image で画像化
PDFはページ単位で画像に変換できるので、画像としてだけ扱いたい場合に便利。
from pdf2image import convert_from_path
pages = convert_from_path('input.pdf', dpi=300)
for idx, page in enumerate(pages):
page.save(f'page_{idx+1}.png', 'PNG')
メリット
- 画像化した結果はビットマップになるため、編集作業は簡単。
- ただし「ページ全体」を画像にするので、個別画像の分解はできない。
5. 画像品質を保ちつつ保存するコツ
| シナリオ | 推奨ツール | 最適設定 |
|---|---|---|
| 元のJPEGをそのまま保存 | pdfimages -j |
– |
| PNG(圧縮なし)で保存 | pdfimages -png |
– |
| 高解像度で画像化 | Ghostscript | -r600 |
| ページ分割+画像化 | ImageMagick | -crop |
トラブルシューティング
- 「画像が重複している」:PDFが 重複画像を暗号化して格納 していることがあります。
pdfimagesで同一の XRef が複数回出るケースをチェック。- 「画像が小さくなる」:解像度 (
-rや-density) を上げる。ただしファイルサイズ増大に注意。- 「画像が破損している」:PDFの構造自体が壊れている可能性。
pdfinfoで情報確認。
6. よくある疑問への答え
| 質問 | 回答 |
|---|---|
| PDF 内の画像は必ず JPEG か PNG? | いえ、JPEG, PNG, GIF, JPEG2000, BMP, TIFF など多種類。 |
| 複数ページから同じ画像を取り出したい | -j オプションで重複を一括除去。Python で画像名をキーに辞書で管理。 |
| 画像の透過部分を保持したい | Ghostscript の -sDEVICE=pngalpha を使うと透過 PNG に変換できます。 |
| 無料で 10TB 以上の PDF を処理したい | コマンドラインツールはフリー、Python スクリプトで自動化すればサーバー上で効率的に処理。 |
7. まとめ:実践的なワークフロー
- まず試す
- 小規模な PDF → まず Adobe Acrobat または Smallpdf で確認。
- 「一括で保存」または「画像一覧」で品質確認。
- 大量/繰り返し処理
pdfimages+bashスクリプトでコマンドライン化。- 画像が 大量に ある場合は
-jで圧縮率を維持。
- カスタム処理
- Python で 画像の自動リサイズ・リネーム、データベース格納、メタ情報付与。
- 保存形式の見直し
- PDF から抜き出した画像が 高解像度・透過必要 なら Ghostscript/Python で PNG へ変換。
ポイント:
- ツール選択は「目的」「品質」「手間」のバランスで決める。
- コマンドライン/Python は「一度設定すれば次回は自動」になるので、本当に大量に画像が必要なプロジェクトでは必須。
- 画像を多用する報告書・プレゼン資料を作る際は「画像が埋め込まれたままでPDFを共有」するよりも、一度抽出 → 別フォルダへ管理 の方が後日編集が簡単です。
これで、PDFから画像を抜き出す作業は「一人で数分で完了」から「大量データの自動化」まで、幅広い用途に対応できるようになります。ぜひお好みの方法で試してみてください。


コメント