- 技術 💻
PDFを画像に変換する方法|JPG・PNGの手順とdpi別の画質・容量を実測
結論
PDFを画像にするいちばん早い方法は、1ページだけならスクリーンショットかMacのプレビューの「書き出す」、全ページならコマンド1行の pdftoppm -jpeg -r 150 入力.pdf 出力名 です。画面用は150dpiのJPG、文字をくっきり残すならPNG、印刷用は300dpiが目安です。機密の書類はオンライン変換に上げず、手元で変換します。
この記事でわかること
- Windows・Mac・スマホ・コマンド・Pythonでの変換手順(目的別の早見表つき)
- 同じPDFを72〜600dpi・6ツールで変換した画質・容量・時間の実測
- 文字化け・真っ黒・巨大な画像・パスワード付きPDFのエラー原文と直し方
PDFを画像にする方法は、「何ページを」「どこで」「どんな画質で」変換するかで決まります。迷ったときは次の順で選びます。
flowchart TD
A{全ページ?} -->|1枚だけ| B[スクショ<br>プレビュー]
A -->|全部| C{機密?}
C -->|なし| D[オンライン可]
C -->|あり| E{コマンド可?}
E -->|可| F[pdftoppm]
E -->|不可| G[Acrobat<br>プレビュー]
やりたいことごとに、いちばん早い方法を先にまとめます。
| やりたいこと | いちばん早い方法 | 詳しい節 |
|---|---|---|
| とにかく1枚だけ画像にしたい | Windows は Windows+Shift+S、Mac はプレビューの「ファイル」→「書き出す」 | Windows/Mac の節 |
| PDFをJPGに変換(全ページ) | pdftoppm -jpeg -r 150 in.pdf page |
コマンド1行で変換する |
| PDFをPNGに変換(文字をくっきり) | pdftoppm -png -r 150 in.pdf page |
JPGとPNGどちらに変換するか |
| 印刷用に高画質で | -r 300 にする(A4で2480×3509px) |
解像度ごとの実測 |
| SNS・ブログ用に軽く | -jpeg -scale-to-x 1080 -scale-to-y -1 |
サイズ指定・切り抜き |
| 1ページだけ・範囲だけ | -f 3 -l 3 -singlefile |
全ページ一括・1ページだけ |
| 大量のPDFをまとめて | for で回すか xargs -P 2 で並列 |
Pythonで変換と一括変換 |
| 背景を透明にしたい | pdftocairo -png -transp |
透過PNG |
| 機密の書類を変換したい | オンラインに上げず、手元のアプリかコマンドで | スマホ・オンライン変換と注意 |
確認環境:Ubuntu 24.04.5 LTS(2CPU・メモリ8GB、ほかの作業と共有)の上で、自作の見本PDF(A4・3ページ。1ページ目は日本語の文字を12・10・8・6pt、2ページ目はベクターの棒グラフと0.25〜2ptの線、3ページ目は1200×900pxの写真風の画像。フォントはIPAゴシックを埋め込み)を作り、poppler-utils 24.02.0(pdftoppm・pdftocairo・pdfimages。PNGの数値は Ubuntu の /usr/bin のものをそのまま実行)、Ghostscript 10.02.1(apt-get download した .deb を作業場所に展開。日本語の CMap は poppler-data 0.4.12 を同じく展開)、ImageMagick 6.9.12-98、Python 3.13.18 の venv に入れた PyMuPDF 2.0(MuPDF 1.28.5)・pdf2image 1.17.0・Pillow 13.0.0 で、72・150・300・600dpi の JPG と PNG に変換しました。時間は同じコマンドを3回実行した最小値です(共有のマシンのため、数十%ほど揺れます)。パスワード付きPDFは qpdf 11.9.0 で自分で暗号化したもの、画像からPDFへの変換は img2pdf 0.6.3 で確かめました。Windows・Mac・iPhone・Android・Adobe Acrobat は手元で動かせないため、Microsoft・Apple・Google・Adobe の公式ページの記載の範囲だけを書いています。オンライン変換サービスには接続もアップロードもしていません。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「PDFを画像に変換する方法|JPG・PNGの手順とdpi別の画質・容量を実測」
PDFを画像に変換する方法の選び方(目的別)
この節では、PDFを画像(JPG・PNG)に変換する方法の全体像と、目的ごとにどれを選べばよいかが分かります。
PDFを画像にする方法は、大きく「画面を撮る」「アプリで書き出す」「オンラインで変換する」「コマンドやプログラムで変換する」の4種類です。1枚だけなら画面を撮るのが早く、全ページを決まった画質でそろえるならアプリかコマンドが確実です。
画面を撮る
スクリーンショット。どの端末でも使えるが、画質は画面の表示の大きさで決まる。
1ページだけ・急ぎ
アプリで書き出す
Mac のプレビュー、Adobe Acrobat Pro。形式と画質を選んで保存できる。
数ページ・画質を選びたい
オンラインで変換
ブラウザでアップロードして変換。インストール不要でスマホからも使える。
機密でない書類だけ
コマンド・Python
pdftoppm・Ghostscript・PyMuPDF など。dpi・形式・ページを細かく決められ、大量でも速い。
全ページ・大量・手元で
目的ごとの設定は次の判断表のとおりです。dpi(dots per inch)は「1インチを何個の点で描くか」で、数字が大きいほど細かく、ファイルも大きくなります。A4の紙は 8.27×11.69インチなので、150dpiなら約1240×1754px、300dpiなら約2480×3508pxになります。
| 目的 | 形式 | 解像度の目安 | この環境での大きさ(A4・1ページ) |
|---|---|---|---|
| とにかく1枚(メール・チャットに貼る) | JPG か PNG | 150dpi か画面のスクリーンショット | JPG 71〜180KB |
| 資料・スライドに貼る(文字が多い) | PNG | 150〜200dpi | 文字のページで PNG 90KB |
| 印刷用 | PNG(写真が主なら高画質のJPG) | 300dpi | PNG 84KB〜4.8MB |
| SNS・ブログ用 | JPG | 幅を1080px などに指定 | 写真のページで JPG 130KB |
| 大量のPDFをまとめて | JPG | 150dpi | 3ページ 333KB・0.27秒 |
| 背景を透明にしてほかの画像に重ねる | PNG(透過) | 用途に合わせる | 透明な点が全体の85% |
| PDFに入っている写真だけ欲しい | 元の形式のまま | 変換せず取り出す | 元の1200×900px のまま |
どの方法でも、変換後の画像は「文字を選んでコピー・検索できない」ことに注意します。文字を残したいならPDFのまま渡すか、文字を抜き出す方法を使います。PDFやWord・Excelの中身をテキスト(Markdown)として取り出す方法は別の記事で扱う題材です。
コマンド1行でPDFをJPG・PNGに変換する(pdftoppm)
この節では、いちばん早く全ページを変換できる pdftoppm のインストールと、そのまま使えるコマンドが分かります。
pdftoppm は、PDFを表示するためのライブラリ Poppler に付いてくる変換コマンドです。Linux では多くのディストリビューションが最初から入れており、無ければ poppler-utils を入れます。Mac は Homebrew の brew install poppler、Windows は Poppler の Windows 向けビルドを入れて bin フォルダーを PATH に足す方法が、pdf2image の公式 README で案内されています。
# Ubuntu・Debian
sudo apt install poppler-utils
# Mac(Homebrew)
brew install poppler
# 全ページを150dpiのJPGに(page-1.jpg, page-2.jpg ... ができる)
pdftoppm -jpeg -r 150 input.pdf page
# 全ページをPNGに
pdftoppm -png -r 150 input.pdf page
# 3ページ目だけを1枚、番号なしの名前で
pdftoppm -png -r 150 -f 3 -l 3 -singlefile input.pdf cover
見本PDF(3ページ)で実行した結果です。何も表示されずに終わり、ページごとのファイルができます。
$ pdftoppm -jpeg -r 150 sample.pdf x
$ ls -l
-rw-r--r-- 1 root root 83588 x-1.jpg
-rw-r--r-- 1 root root 73202 x-2.jpg
-rw-r--r-- 1 root root 184674 x-3.jpg
$ identify x-1.jpg
x-1.jpg JPEG 1240x1755 1240x1755+0+0 8-bit sRGB 83588B
よく使うオプションは次のとおりです(pdftoppm -h の一覧から抜き出しました)。
| オプション | 意味 | メモ |
|---|---|---|
-jpeg/-png/-tiff |
出力の形式 | 何も付けないと PPM 形式(.ppm)になる |
-r 数字 |
解像度(dpi) | 既定は150 |
-f/-l |
最初と最後のページ | -f 2 -l 5 で2〜5ページ |
-singlefile |
最初の1ページだけを番号なしで保存 | 表紙だけ欲しいとき |
-jpegopt quality=90 |
JPGの画質(0〜100) | 既定は75(実測で一致) |
-scale-to-x/-scale-to-y |
幅・高さをピクセルで指定 | 片方を -1 にすると縦横比を保つ |
-x -y -W -H |
ページの一部だけを切り抜く | ピクセルで指定 |
-upw |
開くためのパスワード | パスワードを知っているPDFだけ |
何も形式を付けずに実行すると、ほとんどの画像ビューアーで開きにくい .ppm ができます。「変換したのに開けない」と感じたら、-jpeg か -png を付け忘れていないかを見ます。
WindowsでPDFを画像に変換する方法
この節では、Windows で PDF を JPG・PNG にする方法を、標準の機能・有料ソフト・無料のツールの順に、公式ページの記載の範囲で整理します。
Windows には PDF をまとめて画像に変換する標準の機能はありません。1ページだけなら Snipping Tool で画面を撮り、全ページなら Adobe Acrobat Pro の書き出しか、無料のコマンドや Python を使います。
1ページだけ:Snipping Tool で画面を撮る
PDFを大きく表示する
Edge などでPDFを開き、変換したいページを画面いっぱいに拡大する。画像の細かさは、このときの表示の大きさで決まる。
Windows ロゴ キー+Shift+S を押す
画像キャプチャ用のオーバーレイが開くので、ページの範囲を囲む。Print Screen キーは画面全体をクリップボードに入れる。
保存先を確かめる
撮った画像はスクリーンショット フォルダーに自動で保存される。「名前を付けて保存」で場所とファイル名を決めて別に保存することもできる。
全ページ:Adobe Acrobat Pro で書き出す
Adobe の説明では、Acrobat Pro で PDF を開き、右側の「PDFを書き出し」ツール、またはメニューの「ファイル」→「書き出し形式」→「画像」から JPEG などの形式を選び、「書き出し」で保存先を決めます。複数ページのPDFは、ページごとに別の画像ファイルになります。Adobe の案内は Acrobat Pro を前提にしており、無料の Acrobat Reader でこの書き出しができるとは書かれていません。
無料で全ページ:Python か Ghostscript を入れる
PyMuPDF は Windows(32ビット・64ビット)向けの wheel が配布されており、Python を入れてあれば pip install pymupdf だけで使えます。Ghostscript も Windows 向けのリリースが公式のダウンロードページにあり、AGPL と商用の2つのライセンスで提供されています。どちらもこの記事の後半のコマンド・コードがそのまま使えます(Windows ではコマンド名が gswin64c になります)。
Windows のコマンド操作に慣れていない場合は、関連記事「Python venvの使い方|作成・有効化コマンド早見表と有効化できない時の直し方」の手順で仮想環境を作ってから PyMuPDF を入れると、ほかの Python の環境を汚しません。
MacでPDFをJPG・PNGに変換する方法(プレビュー)
この節では、Mac に最初から入っている「プレビュー」で PDF を JPG・PNG に書き出す手順と、その限界が分かります。
Mac では、プレビューで PDF を開き「ファイル」→「書き出す」でフォーマットを JPEG か PNG にすれば画像になります。追加のアプリは要りません。
プレビューで PDF を開く
変換したい PDF をプレビューで開く。プレビューは Mac に最初から入っている。
「ファイル」→「書き出す」を選ぶ
メニューバーの「ファイル」から「書き出す」を選ぶ。
フォーマットを JPEG か PNG にする
「フォーマット」のポップアップメニューで HEIC・JPEG・JPEG-2000・OpenEXR・PDF・PNG・TIFF から選ぶ。JPEG は画質を調整できる。一覧に無い形式は Option キーを押しながらメニューを開くと出る。
名前と保存先を決めて「保存」
新しい名前を入力するか保存先を選び、「保存」をクリックする。
Apple の公式ページには、PDF に複数のページがあるときの扱いと、解像度の決め方は書かれていません。全ページを決まった dpi でそろえたいときは、ターミナルで Homebrew の poppler を入れて pdftoppm を使う方法が確実です(前の節のコマンドがそのまま動きます)。
変換したあとの PNG・JPG をさらに WebP にしたり、iPhone の写真の HEIC を JPG にしたりする話は、関連記事「WebP・HEICとは|JPG・PNGへの変換と画像圧縮を実測で解説」で扱っています。
スマホ・オンライン変換でPDFを画像にする方法と注意
この節では、iPhone・Android で PDF を画像にする方法と、ブラウザのオンライン変換サービスを使うときに確かめたいことが分かります。
iPhone・Android:表示してスクリーンショット
スマホで1ページだけ画像にするなら、PDF を表示してスクリーンショットを撮るのが早道です。Apple の説明では、Face ID 搭載の iPhone はサイドボタンと音量を上げるボタンを同時に押してすぐ放し、ホームボタンのある機種はサイドボタン(またはトップボタン)とホームボタンを同時に押します。撮った画像は写真アプリの「コレクション」→「メディアタイプ」→「スクリーンショット」で見られます。Android は、Google の説明では電源ボタンと音量小ボタンを同時に押し、撮れないときは電源ボタンを数秒長押しして「スクリーンショット」をタップします。
スクリーンショットの細かさは端末の画面の解像度で決まり、A4 の細かい文字は読めなくなることがあります。拡大して何枚かに分けて撮るか、次のオンライン変換かパソコンでの変換に切り替えます。
オンライン変換:手順はどこもほぼ同じ
Adobe Acrobat オンラインの「PDF を JPG に変換」では、PDF を選ぶかドラッグ&ドロップし、形式(JPG・PNG・TIFF)を選んで「変換」を押し、できた画像をダウンロードします。Adobe の FAQ では、スマホでも同じ手順で変換できると説明されています。iLovePDF には、ページごとに JPG にする「ページから JPG」と、PDF に埋め込まれた画像だけを取り出す「画像抽出」の2つの方式と、「標準」「高」の画質の選択があります。
オンライン変換は、ファイルを変換サービスのサーバーへ送って処理します。Adobe の説明では、ログインして保存しない限り、アップロードしたファイルは処理後に削除されるとしています。それでも、社外秘や個人情報を含む書類は、送ってよいかを先に判断します。
- 1機密・個人情報が入っていないか契約書・見積書・名簿・社内資料は、手元のアプリかコマンドで変換する
- 2会社の規程で外部サービスへの送信が認められているか個人で使えるサービスでも、業務の書類は社内の決まりが優先
- 3利用規約・プライバシーポリシーでファイルの扱いを読んだか保存期間・削除のタイミング・処理する国を見る
- 4ダウンロードした ZIP とファイル名を確かめたか全ページは ZIP で届くことが多い。名前が長い英数字になるサービスもある
機密の書類を急いで画像にしたいとき
見分ける問い:「この書類をメールで社外に送ってよいか」
解像度(dpi)ごとの画質・容量・時間の実測
この節では、同じ PDF を 72・150・300・600dpi で JPG と PNG に変換したときの、画素数・ファイルの大きさ・かかった時間が分かります。
dpi を2倍にすると画素数は4倍になり、PNG の容量は約3〜5倍、時間は約4〜6.5倍に増えました。pdftoppm で見本PDFの3ページ(文字・図・写真)を変換した結果です。
| dpi | 画素数(A4・1ページ) | JPG 3ページの合計と時間 | PNG 3ページの合計と時間 | PNG の内訳(文字/図/写真) |
|---|---|---|---|---|
| 72 | 595×842 | 78KB・0.09秒 | 381KB・0.22秒 | 35KB/13KB/333KB |
| 150 | 1240×1755 | 333KB・0.27秒 | 1,819KB・0.83秒 | 90KB/33KB/1,696KB |
| 300 | 2480×3509 | 1,051KB・0.80秒 | 5,219KB・3.03秒 | 191KB/84KB/4,944KB |
| 600 | 4959×7017 | 3,312KB・4.16秒 | 14,655KB・19.58秒 | 427KB/218KB/14,010KB |
1文字のページは PNG が軽い
150dpi の文字のページは PNG 90KB・JPG 82KB でほぼ同じ。図のページは PNG 33KB の方が JPG 71KB より軽かった。
2写真のページは PNG が重い
同じ150dpi で PNG 1,696KB・JPG 180KB。写真が入るページは JPG にすると約9分の1になった。
3600dpi は時間も重い
PNG の3ページで19.6秒・14.3MB。1ページの画素は約3,500万で、ふつうの用途には大きすぎる。
8pt の日本語の文字を切り抜き、4倍に拡大して並べると、次のように見えました(上から 72dpi の PNG・JPG、150dpi の PNG・JPG、300dpi の PNG・JPG)。
| dpi | 8pt の文字の見え方 | 向く用途 |
|---|---|---|
| 72 | 「画」「像」「換」の画数の多い字がつぶれて読めない。英数字はかろうじて読める | サムネイル・一覧の小さな絵 |
| 150 | 全部の字が読める。拡大すると輪郭が少しぼける | 画面で読む・資料に貼る・メール |
| 300 | 拡大しても輪郭がなめらか | 印刷・細かい図面・拡大して見る資料 |
どの dpi を選ぶかは、次の順で考えると迷いません。
- 1小さく表示するだけ → 72〜96dpi一覧のサムネイル。細かい文字は読めなくてよいとき
- 2画面で読む → 150dpipdftoppm の既定。8pt の文字まで読めた
- 3拡大して見る・細い線がある → 200dpipdf2image の既定は200
- 4印刷する → 300dpiA4 で 2480×3509px。印刷で一般的な目安
- 5特別な理由があるとき → 600dpi大判の図面の一部を拡大するなど。容量と時間は300dpiの約3〜6.5倍
なお、PDF に貼ってある写真は、元の画像の細かさ以上にはなりません。見本の写真は pdfimages -list で 175ppi と表示されたので、300dpi や600dpi で書き出しても写真の部分の情報は増えず、容量だけが増えます。
JPGとPNGどちらに変換するか(文字のにじみと容量)
この節では、PDF を JPG にするか PNG にするかの決め方と、JPG にしたときの文字のにじみ、画質(quality)の設定ごとの容量が分かります。
文字・表・図が中心のページは PNG、写真が中心のページは JPG が向きます。JPG は写真を軽くするのが得意ですが、文字のまわりに薄い汚れ(モスキートノイズ)が出ます。PNG は画質が落ちない形式で、文字はくっきり残りますが、写真のページは重くなります。
JPG(JPEG)が向く
写真・グラデーションが多いページ
SNS・メールで軽く送りたい
写真のページは PNG の約9分の1(150dpi)
PNG が向く
文字・表・グラフ・線画のページ
背景を透明にしたい
何度編集・保存しても画質が落ちない
同じページを PNG と JPG(pdftoppm の既定の画質)で変換し、PNG では真っ白だった点が JPG で灰色(明るさ245未満)に変わった割合を数えました。
| dpi | 白い背景が灰色に変わった点 | 明るさの最大のずれ(0〜255) |
|---|---|---|
| 72 | 2,022個(白い部分の0.43%) | 45 |
| 150 | 4,415個(0.22%) | 51 |
| 300 | 12,329個(0.15%) | 42 |
汚れは文字のすぐまわりに集まるので、割合は小さくても、拡大すると文字がにじんで見えます。dpi を上げると割合は下がりますが、ゼロにはなりません。
JPG の画質(quality)と容量
pdftoppm の JPG の既定の画質は75です(-jpegopt quality=75 を付けた出力とバイト単位で一致しました)。150dpi で画質を変え、PNG との差を PSNR(単位 dB。数字が大きいほど PNG に近い)で比べました。
| quality | 文字のページ | 写真のページ | 向く用途 |
|---|---|---|---|
| 50 | 69KB・39.2dB | 103KB・32.8dB | とにかく軽く |
| 75(既定) | 82KB・42.3dB | 180KB・34.2dB | 画面で見る・SNS |
| 90 | 104KB・45.1dB | 331KB・38.2dB | 資料・写真をきれいに |
| 95 | 125KB・45.9dB | 458KB・41.4dB | 印刷用の写真 |
# 画質90のJPGにする
pdftoppm -jpeg -jpegopt quality=90 -r 150 input.pdf page
「.jpg」と「.jpeg」は中身が同じ形式で、拡張子の綴りが違うだけです。pdftoppm は .jpg で保存します。
PDF画像変換ツール6種の比較(同じPDFで実測)
この節では、pdftoppm・pdftocairo・Ghostscript・ImageMagick・PyMuPDF・pdf2image で同じ PDF を変換したときの、時間・容量・既定の動きの違いが分かります。
速さだけなら Ghostscript、手軽さと素直な既定値なら pdftoppm、Python から使うなら PyMuPDF が向いていました。見本PDFの3ページをまとめて変換した合計です(時間は3回の最小値)。
| ツール | 150dpi PNG | 150dpi JPG | 300dpi PNG | 300dpi JPG |
|---|---|---|---|---|
| pdftoppm | 0.83秒・1,819KB | 0.27秒・333KB | 3.03秒・5,219KB | 0.80秒・1,051KB |
| pdftocairo | 0.84秒・1,639KB | 0.45秒・296KB | 3.08秒・5,221KB | 0.40秒・1,048KB |
| Ghostscript | 0.29秒・1,789KB | 0.12秒・357KB | 1.12秒・3,068KB | 0.22秒・1,215KB |
| ImageMagick | 0.92秒・1,995KB | 0.66秒・653KB | 3.01秒・3,224KB | 2.31秒・2,168KB |
| PyMuPDF | 0.55秒・2,185KB | 0.60秒・710KB | 1.19秒・8,474KB | 1.53秒・2,154KB |
| pdf2image | 0.57秒・1,865KB | 0.42秒・333KB | 2.05秒・5,329KB | 1.28秒・1,051KB |
JPG の容量の差は、主に既定の画質の違いです。PyMuPDF の Pixmap.save は公式ドキュメントで jpg_quality=95 が既定と書かれており、pdftoppm・Ghostscript(-dJPEGQ の既定は75)より大きくなります。pdf2image は中で pdftoppm を呼ぶため、JPG は pdftoppm と同じ大きさでした。
実行したコマンドは次のとおりです。
# pdftocairo(使い方は pdftoppm とほぼ同じ。PDF・SVG にも書き出せる)
pdftocairo -png -r 150 input.pdf page
# Ghostscript(Windows では gswin64c。文字をなめらかにする AlphaBits を付ける)
gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m \
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r150 \
-sOutputFile=page-%d.png input.pdf
# JPG は -sDEVICE=jpeg(画質は -dJPEGQ=90 など)
# ImageMagick(中で Ghostscript を呼ぶ。-density を入力より前に書く)
convert -density 150 input.pdf page-%d.png
convert -density 150 input.pdf -background white -alpha remove page-%d.jpg
Ghostscript は、-dTextAlphaBits=4 -dGraphicsAlphaBits=4 を付けないと文字の輪郭がギザギザのまま出力されます。この環境では、付けない 150dpi の文字のページは 22KB、付けると 42KB で、付けた方が画面で読みやすくなりました。Ghostscript の公式ドキュメントも、高品質に描くには4を勧めています。
既定の解像度もツールで違います。何も指定しないと、pdftoppm・pdftocairo は150dpi、pdf2image は200dpi、Ghostscript・ImageMagick・PyMuPDF は A4 で 595×842px(72dpi 相当)になりました。dpi はいつも明示するのが、思った大きさにならないつまずきを防ぐいちばんの方法です。
全ページ一括・1ページだけ・範囲指定とファイル名の付き方
この節では、全ページ・1ページだけ・ページの範囲を指定する書き方と、ツールごとに違う出力のファイル名の付き方が分かります。
pdftoppm はページ番号を1から数え、ページ数の桁にそろえて0で埋めます。12ページの PDF を変換すると、a-01.png から a-12.png ができ、並べ替えても順番が崩れません。
$ pdftoppm -r 30 -png p12.pdf a # 12ページ全部
a-01.png a-02.png ... a-12.png
$ pdftoppm -r 30 -png -f 2 -l 2 p12.pdf one # 2ページ目だけ
one-02.png
$ pdftoppm -r 30 -png -f 3 -l 3 -singlefile p12.pdf single
single.png
$ pdftoppm -r 30 -png -sep _ -f 1 -l 1 p12.pdf sep # 区切り文字を変える
sep_01.png
$ gs ... -dFirstPage=1 -dLastPage=3 -sOutputFile=gs-%03d.png p12.pdf
gs-001.png gs-002.png gs-003.png
$ convert -density 30 "p12.pdf[0-2]" im-%d.png # ImageMagick は0から数える
im-0.png im-1.png im-2.png
| ツール | ページの指定 | ファイル名の番号 |
|---|---|---|
| pdftoppm/pdftocairo | -f 2 -l 5 |
1から。桁をそろえて0埋め(12ページなら01〜12) |
| Ghostscript | -dFirstPage=2 -dLastPage=5 |
%d の書式どおり。%03d で001〜 |
| ImageMagick | "in.pdf[1-4]"(0から数える) |
%d は0から。1ページ目が im-0.png |
| PyMuPDF | doc[1:5] などPythonで自由に |
コードで決める(page.number は0から) |
| pdf2image | first_page=2, last_page=5 |
リストで受け取り、保存の名前はコードで決める |
ImageMagick の番号が0から始まる点は、ほかのツールの結果と混ぜると1ずれる原因になります。ページ番号とファイル名をそろえたいときは、ImageMagick では -scene 1 を付けるか(im-1.png から始まることを確かめました)、pdftoppm を使います。
透過PNG・サイズ指定・切り抜き・埋め込み画像の取り出し
この節では、背景を透明にする方法、幅をピクセルで決める方法、ページの一部だけを画像にする方法、PDF の中の写真をそのまま取り出す方法が分かります。
背景を透明にする(透過PNG)
JPG は透明を持てないので、透過させるなら PNG にします。2ページ目(グラフのページ)で試すと、透過 PNG では全体の約85%の点が透明になりました。
| 方法 | コマンド | 透明な点 |
|---|---|---|
| pdftocairo | pdftocairo -png -transp in.pdf out |
85.6% |
| Ghostscript | -sDEVICE=pngalpha |
85.4% |
| PyMuPDF | page.get_pixmap(alpha=True) |
85.3% |
| ImageMagick(何も付けない PNG) | convert -density 72 in.pdf out.png |
85.4%(既定で透明になる) |
| pdftoppm | 透過のオプションは無い | 0%(白い背景) |
ImageMagick は何も付けないと背景が透明な PNG になります。黒い背景で表示するビューアーやダークモードのチャットに貼ると、黒い文字が背景に溶けて「真っ黒な画像」に見えます。白い背景にしたいときは -background white -alpha remove を付けます。
幅・高さをピクセルで決める(SNS・ブログ用)
$ pdftoppm -jpeg -scale-to-x 1080 -scale-to-y -1 -f 3 -l 3 -singlefile sample.pdf sns
$ identify sns.jpg
sns.jpg JPEG 1080x1529 1080x1529+0+0 8-bit sRGB 132914B
$ pdftoppm -png -scale-to 2000 a0.pdf s # 長い辺を2000pxに収める
$ identify s-1.png
s-1.png PNG 1415x2000 1415x2000+0+0 8-bit sRGB 21194B
dpi ではなくピクセルで決めると、A4 でもポスターの A0 でも同じ大きさにそろいます。SNS ごとの推奨サイズは各サービスのヘルプで決まっているので、その値を -scale-to-x に入れます。
ページの一部だけを画像にする
$ pdftoppm -png -r 150 -x 100 -y 200 -W 600 -H 300 -f 1 -l 1 -singlefile sample.pdf crop
$ identify crop.png
crop.png PNG 600x300 600x300+0+0 8-bit sRGB 56651B
座標は、指定した dpi で描いたときの左上からのピクセルです。PyMuPDF なら page.get_pixmap(dpi=150, clip=pymupdf.Rect(x0, y0, x1, y1)) で、PDF の座標(ポイント)で範囲を決められます。
PDFの中の写真をそのまま取り出す
写真だけが欲しいなら、ページを画像にするより「埋め込まれた画像を取り出す」方が、元の画質のまま速く手に入ります。
$ pdfimages -list sample.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
3 0 image 1200 900 icc 3 8 jpeg no 41 0 175 175 431K 14%
$ pdfimages -all sample.pdf img
$ identify img-000.jpg
img-000.jpg JPEG 1200x900 1200x900+0+0 8-bit sRGB 440834B
-all を付けると、JPG で入っている画像は再圧縮せずに元の形式で保存されます。PyMuPDF でも doc.extract_image(xref) で同じ 1200×900 の JPG(440,834バイト)が取り出せました。オンライン変換の「画像抽出」と同じことを手元で行う方法です。
PythonでPDFを画像に変換する(PyMuPDF・pdf2image)と一括変換
この節では、Python で PDF を画像にする2つのライブラリの使い方と、たくさんの PDF をまとめて変換する方法が分かります。
PyMuPDF(Poppler が要らない)
PyMuPDF は pip だけで入り、Poppler などの外部のプログラムが要りません。Windows・Mac・Linux 向けの wheel が配布されています。ライセンスは AGPL と商用の二本立てなので、製品に組み込むときはライセンスを確かめます。
import pymupdf # 以前の版の書き方は import fitz
doc = pymupdf.open("input.pdf")
for page in doc:
pix = page.get_pixmap(dpi=150) # 既定は72dpi相当
pix.save(f"page-{page.number + 1}.png") # PNG
# pix.save(f"page-{page.number + 1}.jpg", jpg_quality=85) # JPG(既定は95)
この環境で pip install pymupdf を実行すると 2.0 が入り、依存として pymupdf4llm・pymupdf-layout・onnxruntime なども一緒に入りました。pdf2image・reportlab と合わせた venv は約290MB になり、onnxruntime などを外しても、ページを画像にする処理はそのまま動きました。容量の限られた場所に入れるときは、入ったものを pip show pymupdf の Requires で確かめます。
pdf2image(中で pdftoppm を呼ぶ)
from pdf2image import convert_from_path
# 既定は dpi=200。大きなPDFは paths_only でメモリを節約できる
images = convert_from_path("input.pdf", dpi=150, first_page=1, last_page=3)
for i, im in enumerate(images, 1):
im.save(f"page-{i}.jpg", quality=85)
pdf2image は Poppler の pdftoppm を呼び出す薄い包みなので、Poppler が入っていないと動きません。公式の README では、ページ数が多い PDF は output_folder と paths_only=True で、画像をメモリに全部載せない方法が案内されています。画像の大きさをそろえたり切り抜いたりする後処理は、関連記事「Python Pillowで画像処理|リサイズ・トリミング・形式変換のコード集」のコードがそのまま使えます。
たくさんのPDFをまとめて変換する
同じ PDF を20個並べ、150dpi の JPG に変換しました(合計60枚)。
# 1つずつ順番に
for f in in/*.pdf; do
pdftoppm -r 150 -jpeg "$f" "out/$(basename "$f" .pdf)"
done
# 2つずつ並列に(CPUの数に合わせる)
ls in/*.pdf | xargs -P 2 -I{} sh -c 'pdftoppm -r 150 -jpeg "$1" "out/$(basename "$1" .pdf)"' _ {}
| 方法 | 20ファイル(60枚)の時間 | できるファイル名 |
|---|---|---|
| for で1つずつ | 5.29秒 | doc01-1.jpg, doc01-2.jpg ... |
| xargs -P 2(2つ並列) | 2.83秒 | 同じ |
出力名に元の PDF の名前を入れておくと、どの PDF の何ページ目かが名前で分かります。並列の数は CPU の数までにします。xargs の並列の書き方は、関連記事「xargsの使い方とオプション一覧|-0・-I・-P並列をコピペ例で解説」で詳しく扱っています。
PDFを画像にするときのよくあるエラーとつまずき
この節では、文字化け・真っ白・真っ黒・巨大な画像・パスワード付き PDF など、変換でつまずいたときの原文と直し方が分かります。
| 症状 | 出た原文(この環境) | 原因 | 直し方 |
|---|---|---|---|
| 日本語だけ消える・文字化け | Syntax Error: Missing language pack for 'Adobe-Japan1' mapping |
フォントが埋め込まれていない PDF で、日本語の対応表(poppler-data)が無い | poppler-data を入れる。pdffonts で emb が no のフォントを確かめる |
| パスワードで止まる(Poppler) | Command Line Error: Incorrect password |
開くためのパスワードが付いている | 知っているパスワードを -upw で渡す |
| パスワードで止まる(Ghostscript) | **** This file requires a password for access. |
同上 | -sPDFPassword=… を付ける |
| ImageMagick が PDF を読まない | attempt to perform an operation not allowed by the security policy `PDF' |
policy.xml で PDF の読み込みが止められている | pdftoppm などを使う。設定の変更は管理者の判断で |
| ImageMagick で何もできない | no images defined `out.png' |
Ghostscript が入っていない(この文言だけが出た) | Ghostscript を入れるか、pdftoppm を使う |
| 大きな PDF で止まる | cache resources exhausted |
画素数がメモリ・ディスクの上限を超えた | dpi を下げる・-scale-to で画素数を決める |
| PDF ではないと言われる | Syntax Warning: May not be a PDF file |
拡張子だけ .pdf の別のファイル・壊れたファイル | 元のアプリで PDF として保存し直す |
日本語が消える・文字化けする
フォントを埋め込まずに作った PDF(reportlab の HeiseiKakuGo-W5 で作成)を変換すると、Poppler では英字は描かれ、日本語だけが消えました。
$ pdffonts noembed.pdf
Syntax Error: Missing language pack for 'Adobe-Japan1' mapping
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
Helvetica Type 1 WinAnsi no no no 2 0
$ pdftoppm -r 100 -png noembed.pdf pp
Syntax Error: Missing language pack for 'Adobe-Japan1' mapping
Syntax Error: Unknown font tag 'F2'
Syntax Error: Unknown font tag 'F2'
Syntax Error (1918): No font in show
同じ PDF を PyMuPDF で変換すると、内蔵の日本語フォントで代わりに描かれ、日本語も表示されました。Ghostscript でも、日本語の CMap(poppler-data)を置く前は、フォントを埋め込んだ見本 PDF でさえ日本語がすべて消え、error executing PDF token と出ました。日本語が消えるときは、変換ツールの日本語用のデータ(poppler-data)が入っているか、PDF にフォントが埋め込まれているか、の2つを見ます。PDF を作る側では、フォントを埋め込んで保存するのが確実です。
真っ白・真っ黒に見える
- 真っ黒:透過 PNG を黒い背景で表示している。
-background white -alpha removeか、pdftoppm で白い背景のまま変換する。 - 真っ白:Ghostscript の日本語の CMap が無い、フォントが埋め込まれていない、などで文字だけ描かれなかった。上の文字化けと同じ確かめ方をする。フォームの入力欄の値など、注釈として入っているものは
-hide-annotationsを付けると消えるので、付けていないかも見る。 - 小さすぎて読めない:ImageMagick・Ghostscript・PyMuPDF は dpi を指定しないと 72dpi 相当(A4 で 595×842px)になる。
巨大な画像になる・メモリが足りない
A0 のポスター(2384×3370pt)を300dpi にすると、1ページで 9933×14043px、約1億4千万画素になり、色をそのまま持つと約418MB です。ImageMagick のメモリとディスクの上限を下げて(-limit memory 256MiB -limit disk 300MiB)変換すると、5.5秒で次のように止まりました。
convert-im6.q16: cache resources exhausted `/dev/shm/t139/tmp/magick-a_JHFvXFRAnpADUPyoGPGqtgpw7MRoVH1' @ error/cache.c/OpenPixelCache/4119.
convert-im6.q16: no images defined `a0.png' @ error/convert.c/ConvertImageCommand/3234.
大判の PDF は dpi ではなく -scale-to 2000 のように画素数で決めると、紙の大きさに関係なく扱える大きさになります(上の A0 は 1415×2000px・21KB)。
パスワード付きPDF(正規の手順)
開くためのパスワードが付いた PDF は、パスワードを知っている人が、そのパスワードを渡して変換します。知らない PDF のパスワードを外す方法は扱いません。作成者にパスワードか、パスワードの無い版を頼みます。
$ pdftoppm -r 50 -png locked.pdf x
Command Line Error: Incorrect password
$ pdftoppm -r 50 -png -upw open123 locked.pdf x # 知っているパスワードを渡す
$ ls
locked.pdf x-1.png x-2.png x-3.png
import pymupdf
doc = pymupdf.open("locked.pdf")
print(doc.needs_pass) # 1(パスワードが要る)
doc.authenticate("open123") # 2 が返り、開けた
doc[0].get_pixmap(dpi=150).save("p1.png")
認証の前にページを描こうとすると、PyMuPDF は ValueError: document closed or encrypted、pdf2image は PDFPageCountError: Unable to get page count. を出しました。pdf2image では userpw= でパスワードを渡せます。この環境の ImageMagick 6.9.12(Ghostscript は作業場所に展開したもの)は、-authenticate を付けても Ghostscript の呼び出しで失敗したため、パスワード付きの PDF は pdftoppm か PyMuPDF で変換するのが確実でした。
画像(JPG・PNG)をPDFに戻す方法
この節では、逆向きに、JPG・PNG の画像を1つの PDF にまとめる方法を短く紹介します。
画像を画質を落とさずに PDF にするなら img2pdf が確実です。JPG を再圧縮せずにそのまま PDF に入れます。
$ img2pdf pg-1.jpg pg-2.jpg pg-3.jpg -o back.pdf
$ pdfinfo back.pdf | grep -E 'Pages|Page size'
Pages: 3
Page size: 595.2 x 842.4 pts (A4)
$ pdfimages -list back.pdf | tail -1
3 2 image 1240 1755 rgb 3 8 jpeg no 5 0 150 150 180K 2.8%
$ pdftotext back.pdf - | od -c | head -1
0000000 \f \f \f
150dpi の JPG から作ると、ページの大きさは A4 に戻り、中の画像は元の JPG と同じ大きさ(3ページ目は180K)でした。ただし、pdftotext で抜き出せたのはページの区切り記号3つだけで、画像から作った PDF は文字を検索・コピーできません。ImageMagick の convert pg-*.jpg out.pdf でも PDF になりますが、画像を作り直すため画質が変わることがあります。Mac はプレビューで画像を開き、「ファイル」→「書き出す」でフォーマットを PDF にする方法が Apple のページに載っています。
図をくっきり保ったまま扱いたいときは、PNG ではなく SVG で書き出せるかも検討します。違いは関連記事「SVGファイルとは|PNGとの違い・開き方・作り方を実測で解説」で扱っています(pdftocairo は -svg で PDF を SVG にできます)。
よくある質問
Q. PDFを画像に変換するいちばん簡単な方法は?
A. 1ページだけなら、PDF を大きく表示してスクリーンショットを撮る方法です(Windows は Windows ロゴ キー+Shift+S)。Mac ならプレビューの「ファイル」→「書き出す」で JPEG か PNG を選びます。全ページなら pdftoppm -jpeg -r 150 in.pdf page の1行で変換できます。
Q. PDFをJPEG(JPG)に変換するのとPNGに変換するのは、どちらがよいですか? A. 文字・表・図が中心なら PNG、写真が中心なら JPG です。150dpi の実測で、文字のページは PNG 90KB・JPG 82KB とほぼ同じでしたが、写真のページは PNG 1,696KB・JPG 180KB でした。JPG は文字のまわりに薄い汚れが出ます。
Q. 何dpiで変換すればよいですか? A. 画面で読むなら150dpi、印刷するなら300dpi が目安です。72dpi では 8pt の日本語がつぶれて読めませんでした。600dpi は 300dpi の約3〜6.5倍の容量と時間がかかり、ふつうの用途には大きすぎます。
Q. Windowsに標準でPDFを画像にする機能はありますか? A. まとめて変換する標準の機能はありません。1ページなら Snipping Tool で画面を撮り、全ページなら Adobe Acrobat Pro の「書き出し形式」→「画像」か、無料の PyMuPDF(pip で入る)・Ghostscript を使います。
Q. オンラインの変換サイトを使っても問題ありませんか? A. 機密でない書類なら手軽な方法です。ただしファイルはサービスのサーバーに送られます。契約書・個人情報・社内資料は、会社の規程を確かめたうえで、手元のアプリかコマンドで変換するのが安全です。
Q. 全ページではなく1ページだけ変換できますか?
A. できます。pdftoppm なら -f 3 -l 3 で3ページ目だけ、-singlefile を足すと番号の付かない名前で保存されます。ImageMagick では "in.pdf[2]" のように0から数えた番号で指定します。
Q. 変換した画像の文字がぼやけます。
A. dpi を上げる(150→300)、JPG なら画質を上げる(-jpegopt quality=90)か PNG にする、Ghostscript なら -dTextAlphaBits=4 を付ける、の順で試します。スクリーンショットの場合は、撮る前に PDF を大きく表示します。
Q. 変換すると日本語が消えたり文字化けしたりします。
A. PDF にフォントが埋め込まれておらず、変換ツールに日本語のデータが無いことが多い原因です。pdffonts で emb が no のフォントがあるかを見て、Poppler なら poppler-data を入れます。PyMuPDF は内蔵の日本語フォントで代わりに描けました。
Q. パスワード付きのPDFは画像にできますか?
A. パスワードを知っていれば、pdftoppm の -upw、Ghostscript の -sPDFPassword、PyMuPDF の authenticate()、pdf2image の userpw で渡して変換できます。知らない場合は作成者に頼みます。
Q. PDFに入っている写真だけを取り出せますか?
A. pdfimages -all in.pdf img で、埋め込まれた画像を元の形式・元の大きさのまま取り出せます。見本では 1200×900px の JPG がそのまま出てきました。
Q. 変換した画像を元のPDFに戻せますか?
A. img2pdf で画像を PDF にまとめられますが、文字は画像のままなので検索やコピーはできません。元の PDF は消さずに残しておくのが確実です。
まとめ
- 1ページだけならスクリーンショットか Mac のプレビューの書き出し、全ページなら
pdftoppm -jpeg -r 150 in.pdf pageがいちばん早い。 - 画面で読むなら150dpi、印刷なら300dpi。dpi を2倍にすると画素は4倍になり、PNG の容量は約3〜5倍、時間は約4〜6.5倍に増えた。
- 文字・図は PNG、写真は JPG。150dpi の写真のページは JPG が PNG の約9分の1、JPG は文字のまわりに薄い汚れが出る。
- ツールで既定の dpi・画質・ファイル名の番号・背景の透過が違う。dpi と形式はいつも明示し、ImageMagick の番号は0から始まる点に注意する。
- 機密の書類はオンラインに上げず手元で変換する。日本語が消えたらフォントの埋め込みと poppler-data、パスワード付きは知っているパスワードを渡す正規の手順で。
次に読むとよい記事です。変換した画像の圧縮や形式の変え方は関連記事「WebP・HEICとは|JPG・PNGへの変換と画像圧縮を実測で解説」で、Python での後処理は関連記事「Python Pillowで画像処理|リサイズ・トリミング・形式変換のコード集」で扱っています。
参考・出典
確認日はいずれも 2026年10月29日です。
- Poppler(PDF 描画ライブラリ・poppler-data):https://poppler.freedesktop.org/
- pdf2image(GitHub・README):https://github.com/Belval/pdf2image
- PyMuPDF「Installation」:https://pymupdf.readthedocs.io/en/latest/installation.html
- PyMuPDF「Images」(ページを画像にする):https://pymupdf.readthedocs.io/en/latest/recipes-images.html
- PyMuPDF「Pixmap」(save と jpg_quality):https://pymupdf.readthedocs.io/en/latest/pixmap.html
- Ghostscript「Details of Ghostscript Output Devices」:https://ghostscript.readthedocs.io/en/latest/Devices.html
- Ghostscript「Downloads」:https://www.ghostscript.com/releases/gsdnld.html
- ImageMagick「Security Policy」:https://imagemagick.org/security-policy/
- Apple「Mac のプレビューで画像のファイルタイプを変換する」:https://support.apple.com/guide/preview/prvw1012
- Apple「スクリーンショットを撮る」:https://support.apple.com/ja-jp/102616
- Microsoft「Snipping Tool を使ってスクリーン ショットをキャプチャする」:https://support.microsoft.com/ja-jp/help/13776/
- Google「Android デバイスで画面の画像(スクリーンショット)または動画を撮影する」:https://support.google.com/android/answer/9075928?hl=ja
- Adobe「PDF を JPG に変換する方法」(Acrobat Pro):https://www.adobe.com/jp/acrobat/how-to/convert-pdf-to-jpg.html
- Adobe「PDF を JPG に変換(Acrobat オンライン)」:https://www.adobe.com/jp/acrobat/online/pdf-to-jpg.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「PDFを画像に変換する方法|JPG・PNGの手順とdpi別の画質・容量を実測」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。