PDF を JPG や PNG に変換する:DPI で何が変わるか、1 ページだけ書き出すには
「PDFから画像」は全ページを ZIP にレンダリングし、JPEG を選ばなければ PNG になる。ブラウザのフォームにあるのは形式と DPI だけで、ページ指定と WebP の API フィールドは無視される。150 と 300 DPI での実測ファイルサイズと、1 ページだけ書き出す方法。
PDFから画像は、PDF の全ページをそれぞれ 1 つの画像ファイルにして、ZIP で返す。ブラウザのフォームにある設定は形式(PNG か JPEG)と DPI の 2 つで、ページを選ぶことも WebP を選ぶこともできない。どちらの設定も出力サイズを大きく変える。以下の節で、どれくらい変わるかを示す。
実例:6 ページ、4 つの設定
テストファイルは Ghostscript で生成した 6 ページ、US レター、テキストのみの文書だ。1 ページあたり 11 pt の Times で 32 行、5,593 バイト。これをローカルビルドのサーバーの /api/v1/convert/pdf/img エンドポイントに、設定ごとに 1 回ずつ送った。数値は 2026-10-04 の 1 回の実行によるもので、別の文書ではサイズが変わる。
| DPI | 形式 | 1 ページのピクセル数 | 1 ページ目 | ZIP、全 6 ページ |
|---|---|---|---|---|
| 150 | PNG | 1275 x 1650 | 53,400 バイト | 195,476 バイト |
| 300 | PNG | 2550 x 3300 | 127,391 バイト | 494,897 バイト |
| 150 | JPEG | 1275 x 1650 | 252,280 バイト | 1,340,684 バイト |
| 300 | JPEG | 2550 x 3300 | 685,891 バイト | 3,272,299 バイト |
ピクセル寸法はページサイズから決まる。レターのページは 8.5 × 11 インチなので、150 DPI なら 1275 × 1650、300 DPI なら 2550 × 3300 だ。DPI を 2 倍にするとピクセル数は 4 倍になるが、ここでは PNG の ZIP は約 2.5 倍にしかならなかった。均一な白い領域はよく圧縮されるからだ。
このファイルでは JPEG のほうが PNG より大きかった。150 DPI で 1 ページ目のサイズは約 4.7 倍だった。JPEG は小さい形式だという通説が当てはまるのは写真だ。テキストのページはほとんどが均一な白と鋭いエッジで、PNG はこれをよく圧縮するが JPEG は圧縮しない。写真やスキャンのページでは逆になることもある。100 ページを変換する前に、代表的な 1 ページで試すこと。
ZIP は PDF の名前が付く(contract.pdf なら contract.zip)。中身は page.1.png から page.6.png で、JPEG を選んだ場合は .jpg ファイルになる。
API は受け付けるが無視するオプション
ブラウザのフォームにはこの 2 つはないが、スクリプトで送ってもエラーにならず、効果もない。
- ページ指定。
pageNumbers=2を送ると、1 ページではなく 6 ページすべてが返った。常に全ページがレンダリングされる。 - WebP。
imageFormat=webpは、pngと同じ名前とサイズの PNG ファイルを返した。JPEG を選ぶのはjpegとjpgだけで、ほかの値は PNG にフォールバックする。
WebP が必要なら、後から画像エディタで PNG を変換する。
1 ページだけ取り出す
先にそのページを切り出し、1 ページの PDF を変換する。
- ページの抽出を開き、PDF をアップロードして、残すページとして
2を入力する。テストでは、結果は 1 ページの PDF だった。 - その PDF をPDFから画像にアップロードし、DPI を 150 にして PNG のままにする。ZIP には
page.1.pngの 1 ファイルが入っていた。
元の 2 ページ目から作ったのに、ファイル名は page.1.png になる。抽出した PDF では番号が振り直されるからだ。元のページ番号が重要なら、名前を変えること。
DPI:フォームと API で食い違う点
Web フォームには 300 が初期入力されている。dpi を省略して API を直接呼ぶと、150 でレンダリングされる。スクリプトの出力画像がブラウザより小さいなら、これが理由だ。どちらでも dpi を明示して送ること。数値でない値は 400 で拒否され、メッセージは「dpi must be a number」となる。
目安は上の表に基づくもので、画質のベンチマークに基づくものではない。150 DPI は画面でページ全体を読むには十分で、300 DPI は印刷や、細かい文字を拡大して見る用途向けだ。この実行では、300 DPI の PNG の ZIP は 150 DPI のものの約 2.5 倍で、スキャン中心の長い文書ではそれがさらに積み重なる。
残らないもの
結果はピクセルなので、次のようになる。
- テキストは選択も検索もできなくなる。テキストが必要ならPDFからテキスト、スキャンなら OCR を使う。
- リンクは機能しなくなる。
- ベクターのロゴや図は、選んだ DPI でラスタライズされ、後で拡大するとぼける。もっと高い DPI でやり直すこと。
元の PDF は画像と一緒に取っておく。画像からPDFで戻しても、元の文書ではなく、文字の写真でできた PDF になる。
パスワードで保護された PDF は、400 の This PDF is password-protected. Enter its password. で拒否され、このエンドポイントに password フィールドを送っても変わらない。先にパスワード解除でパスワードを外す。
一括で使う前に確認する
ZIP から 1 ページを取り出し、100% の倍率で小さな文字と細い線を確認する。ぼやけていたら DPI を上げてやり直す。ZIP が大きすぎるなら DPI を下げるか、手元のページで実際に小さくなると確認してから JPEG に切り替える。