PDFから画像を抽出する方法|ターミナルで一括取り出し|UNIX Cafe

当サイトでは、コンテンツの一部に広告を掲載しています。
第22回|UNIX Cafe「PDF の中から画像を取り出す」

UNIX Cafe | 第22回

目次

はじめに|PDFの中の「画像だけ」を取り出したいあなたへ

PDFファイルを見ていると、

  • 写真や図だけを使いたい
  • スライドや資料から画像だけ抜き出したい
  • 劣化せずに元の画質のまま保存したい

そんな場面に出会うことがあります。

実は、ターミナルを使えば PDF の中に入っている画像を、かんたん・高速・高品質で取り出すことができます。

今回は、UNIX Cafe のカウンターでの会話を交えながら、
pdfimages コマンドを使った PDF → 画像抽出の方法を、初心者向けにやさしく解説します。

PDFの画像抽出に使うコマンド:pdfimages

pdfimages は、PDF 内に埋め込まれている画像を再圧縮せず、
そのままの形式と品質で抽出できる便利なコマンドです。

ポイントは次の3つです。

  • 画質が劣化しない
  • PNG / JPEG を自動判別
  • 一括処理がとても速い

PDF資料を扱う人にとって、まさに「定番ツール」と言えます。

事前準備|macOS でのインストール方法

macOS では、Homebrew を使って簡単にインストールできます。

brew install poppler

この中に pdfimages コマンドが含まれています。
インストール後は、すぐに使える状態になります。

PDFから画像を抽出する基本コマンド

基本形はとてもシンプルです。

pdfimages -all input.pdf output

意味は次のとおりです。

  • input.pdf:元のPDFファイル
  • output:出力される画像ファイル名のプレフィックス

実行例

pdfimages -all input.pdf output

実行すると、カレントディレクトリに次のような画像が生成されます。

output-000.jpg
output-001.jpg
output-002.jpg
...

PDF 内に保存されていた形式のまま、画像が取り出されます。
画質が変わらないのが最大の魅力です。

よく使うオプション一覧

オプション内容
-allすべての画像を元の形式で抽出
-pngPNG形式で出力(再圧縮あり)
-jJPEG画像のみ抽出
-listPDF内の画像一覧を表示

基本的には -all を使えばOK です。

PDF内の画像を「確認だけ」したい場合

画像を抽出する前に、「どんな画像が入っているかだけ知りたい」こともありますよね。

そんなときは次のコマンドを使います。

pdfimages -list input.pdf

出力例:

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1365  2048  rgb     3   8  jpeg   yes     15   0  300   300  200K  1.0
   2     1 image    1200  1600  rgb     3   8  jpeg   yes     23   0  300   300  150K  1.0

これで、

  • 画像のサイズ
  • 解像度
  • ファイル形式
  • ページ番号

などを一覧で確認できます。
無駄な抽出を防げる便利な機能です。

注意点|抽出できないケースもある

  • pdfimages はとても強力ですが、次のような場合は注意が必要です。
  • ベクター描画(図形・線・文字)は画像として抽出されない
  • スキャンPDFは「1ページ=1画像」になることがある
  • 透明レイヤーや特殊形式は対象外の場合がある
  • 「画像として埋め込まれているかどうか」が判断基準になります。

複数PDFを一括で処理するシェルスクリプト

#!/bin/bash

# ==========================================
# PDF から画像を一括抽出するスクリプト
# 使い方:
#   ./pdf_extract_img.sh file1.pdf file2.pdf ...
#   ./pdf_extract_img.sh *.pdf   ←複数OK
# ==========================================

# 引数チェック
if [ $# -eq 0 ]; then
    echo "使い方: $0 <pdfファイル> ..."
    exit 1
fi

# pdfimages が使えるか確認
if ! command -v pdfimages >/dev/null 2>&1; then
    echo "⚠ 'pdfimages' が見つかりません。"
    echo "  macOS: brew install poppler"
    exit 1
fi

# PDFを1つずつ処理
for file in "$@"; do
    if [ ! -f "$file" ]; then
        echo "⚠ ファイルがありません: $file"
        continue
    fi

    base=$(basename "$file" .pdf)
    outdir="${base}_images"

    echo "📦 抽出中: $file → $outdir"
    mkdir -p "$outdir"

    # -all → 全ての画像を抽出
    pdfimages -all "$file" "$outdir"/img

    # 抽出されたか確認
    if ls "$outdir"/* >/dev/null 2>&1; then
        echo "✅ 完了!画像を $outdir/ に保存しました"
    else
        echo "⚠ 画像が見つかりませんでした: $file"
    fi
done

使い方

スクリプトの保存

pdf_extract_img.sh

例:pdf_extract_img.sh という名前でファイルを保存します。

実行権限を付ける

chmod +x pdf_extract_img.sh

chmod +x でファイルに実行権を付けます。

単一ファイルを処理

./pdf_extract_img.sh sample.pdf

1枚だけのPDFファイルを処理する場合は、ファイル名「sample.pdf」を指定してください。

複数ファイルもOK

./pdf_extract_img.sh *.pdf

複数のPDFファイルを処理する場合は、ファイル名ではなく「 *.pdf」で*アタリスクを指定してください。

抽出結果

sample.pdf

sample_images/
   ├ img-000.jpg
   ├ img-001.png
   ├ ...

sample_images」というフォルダが作成され、フォルダの中に画像が抽出されます。

ターミナルを使うと、専用ソフトを使わずに「面倒な作業」を自動化することができます。

まとめ|PDFの画像抽出はターミナルが最速・最強

最後に、今回のポイントをまとめます。

操作コマンド
インストールbrew install poppler
画像抽出pdfimages -all input.pdf output
一括処理./pdf_extract_img.sh *.pdf

PDFから画像だけを取り出したいなら、
pdfimages はシンプルで失敗しにくい最適解です。

さらに学びたいあなたへ

📘 用途ごとに選ぶ Linux のおすすめ本

あわせて読みたい
レベル・用途別おすすめ Linux 本リスト|UNIX Cafe UNIX Cafe | 第65回 Linux の世界には、「はじめて触る人」「コマンドを覚えはじめた人」「サーバーに挑戦したい人」と、さまざまな段階があります。そんなときに、自分...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe 編集部

UNIX Cafe は、むずかしい言葉をできるだけ使わず、物語を読むような気持ちで気軽に学べる場所です。
プログラミングは、アイデアをコンピューターに伝えるための「ことば」。
簡単な単語と文法を覚えることで、誰でもターミナルから便利なコマンドを使えるようになります。
コーヒーを片手に立ち寄るような気持ちで、やさしいプログラミングの世界を、
そっとのぞいてみてください。

目次