PDFを画像にするとき、解像度をいくつにすればいいか
「このPDF、何DPIで書き出せばいいですか」という質問には、実は前提の間違いがある。PDFそのものは解像度を持たない。 解像度が決まるのは、PDFを画像にする、そのタイミングだ。
PDFに「解像度」が無い理由
PDFのページは、写真のような画素の並びではなく、「この位置にこの文字を置く」「ここからここへ線を引く」という命令の集まりでできている(ベクタ形式)。拡大しても文字がにじまないのはこのためだ。
画像にする(ラスタライズする)とき、初めて1インチをいくつの画素で表すかというDPI(Dots Per Inch)を決める必要が出てくる。同じPDFページでも、指定するDPI次第で、出てくるPNGの画素数はいくらでも変わる。
DPIを上げると、面積は必ず4倍になる
DPIを2倍にすると、縦と横それぞれの画素数が2倍になる。面積(総画素数)で見ると、2×2で必ず4倍になる。 ここは幾何の話なので、中身が何であっても変わらない。
pdf-libで自作したA4・1ページのPDFを、実際にこのサイトのツールで72・150・300・600DPIに書き出して画素数を確認した。
| DPI | 画素数(幅×高さ) | 面積の倍率(前段比) |
|---|---|---|
| 72 | 596 × 842 | — |
| 150 | 1,241 × 1,754 | 約4.3倍 |
| 300 | 2,481 × 3,508 | 4.0倍 |
| 600 | 4,961 × 7,016 | 4.0倍 |
150→300、300→600はDPIがきっちり2倍なので、面積もきっちり4倍になっている。
ファイルサイズは、面積ほど素直に増えなかった
「面積が4倍になるから、ファイルサイズも4倍になる」と思うかもしれないが、同じPDFで実測すると、そうはならなかった。
段落を敷き詰めた文字主体の1ページを、同じ4段階のDPIでPNGに書き出してファイルサイズを測った。
| DPI | ファイルサイズ | 面積の倍率 | サイズの倍率 |
|---|---|---|---|
| 72 | 142.9 KB | — | — |
| 150 | 485.1 KB | 約4.3倍 | 約3.4倍 |
| 300 | 1,233.6 KB | 4.0倍 | 約2.5倍 |
| 600 | 3,088.3 KB | 4.0倍 | 約2.5倍 |
面積が4倍になった区間(150→300、300→600)で、ファイルサイズは2.5倍ほどしか増えていない。
理由はPNGの圧縮の仕方にある
原因は、書き出し形式であるPNGの圧縮方式にある。
PNGは同じ色の並びが続くほど効率よく圧縮できる。文字主体のページは、DPIをどれだけ上げても大部分が「余白(白一色)」のままで、そこはDPIが上がってもほとんど圧縮コストが増えない。増えるのは文字の輪郭線の部分だけで、輪郭の複雑さは面積ほど激しくは増えない。結果として、ファイルサイズの伸びは面積の伸びより緩やかになる。
写真が多いページでは、話が変わる
同じ検証を、なめらかなグラデーションを敷いた「写真に近い」1ページでもやってみた。72DPI・596×842pxでの結果を、文字主体のページと並べるとこうなる。
| ページの中身 | 72DPIでのファイルサイズ |
|---|---|
| 文字主体 | 142.9 KB |
| 写真に近い画像 | 437.9 KB |
同じ画素数・同じDPIでも、写真に近いページは文字主体のページの3倍以上重い。写真のような画像は、ほぼ全ての画素が隣と少しずつ違う値を持つため、PNGが得意とする「同じ色の並びをまとめる」圧縮が効きにくい(別記事「JPEG・PNG・WebPをどう使い分けるか」で実測した、写真にPNGを使うとファイルが膨らむ現象と同じ理由だ)。
この性質上、写真に近いページでDPIを上げていくと、余白で圧縮が効く文字主体のページとは違い、画素数の増え方(4倍)に近い形でファイルサイズも増えやすい。増える画素のほとんどが「新しい、圧縮しにくい情報」になるからだ。
文字主体のPDFはDPIを上げてもサイズの伸びが穏やかだが、写真が多いPDFではDPIを上げた分だけ、ほぼそのまま重くなると考えたほうがいい。
用途に対してDPIを上げすぎない
画素数が増えれば増えるほど画質は上がるが、上の実測のとおり、文字主体でも600DPIの1ページで3MBを超える。上げるほど得をするわけではない。
判断の軸は「その画像を最終的にどこで見るか」だ。
- 画面で見るだけなら、画面の表示解像度以上に上げても見た目は変わらない。
表示できる画素数を超えた分は、縮小されて捨てられるのと同じになる
- 紙に印刷するなら、画面より高いDPIが必要になる。 紙は画面より近くで細部を見られるため、
同じ「きれいに見える」水準に必要な画素密度が画面より高くなる
- DPIを上げるほどファイルサイズは増える。 特に写真が多いページでは
ほぼ画素数どおりに重くなるため、必要以上に上げるとファイルが無駄に大きくなる
元の画像より高くしても、情報は増えない
PDFの中に、すでに低い解像度の画像(写真やスキャン画像)が埋め込まれている場合、書き出すDPIをどれだけ上げても、埋め込まれている画像が持っている以上の情報は出てこない。
画素を増やす処理(補間)は、既にある画素の間を周りの色から推測して埋めるだけで、新しい実際の情報は作られない。埋め込み画像の解像度を超えてDPIを上げると、ファイルサイズだけが増えて、見た目の精細さはほとんど変わらない。
PNGとJPEG、どちらが向くか
このツールはPNGでの書き出しだけに対応しているが、判断の考え方として触れておく。
「JPEG・PNG・WebPをどう使い分けるか」の記事で実測したとおり、平坦な色面と線でできた画像はPNGと相性がよく、写真のような連続階調の画像はJPEG(やWebP)と相性がいい。 理由は同じで、PNGは「同じ色をまとめる」方式、JPEGは「細かい変化を捨てる」方式だからだ。
文字主体のPDFページはPNGに向いている。今回の実測でファイルサイズの伸びが穏やかだったのも、この相性のよさが理由の一つだ。逆に、写真が多いページをPNGで書き出すと、JPEGで書き出すよりファイルが大きくなりやすい。
まとめ
- PDFに解像度は無い。 画像にする時点で、DPIとして初めて決まる
- DPIを2倍にすると、画素数(面積)は必ず4倍になる。 ここは中身に関係ない、幾何の話
- ファイルサイズの増え方は中身次第。 実測では、文字主体のページは面積ほど増えなかった
(4倍の面積に対し約2.5倍)。理由はPNGが余白をまとめて圧縮できるため
- 写真に近いページは、DPIを上げた分だけファイルサイズも増えやすい。 圧縮がまとめにくいため
- 用途に対して必要以上にDPIを上げない。 画面用なら画面の解像度まで、
埋め込み画像より高くしても精細さは増えない
計測の条件
このサイトの「PDFを画像にする」ツールを実際に使い、pdf-libで自作したA4・1ページのPDF(文字主体:10ptの英文を隙間なく敷き詰めたもの/写真に近い画像:なめらかなグラデーションに弱いノイズを乗せた900×600のPNGを埋め込んだもの)を、72・150・300・600DPIで書き出してファイルサイズを測った。写真に近いページは72DPIのみ計測できた(それ以上のDPIでは書き出しに時間がかかりすぎたため、今回は計測を見送った)。