ゼミの発表でスライドに論文の図を貼ったら、投影した瞬間にグラフの軸の目盛りが読めなくなりました。私はいつもPDFビューアの画面をスクリーンショットで撮って貼っていたのですが、あれはPDFの中に入っている画像そのものではなく、紙面に置かれた大きさのまま画面に描き直されたものを切り取っているだけです。どのくらい損をしているのか気になって、CC BY 4.0で公開されている論文(RAG-Safety-Bench、Adithiyan Rajan Indira Saravanan・Kathleen C. Fraser、arXiv:2609.11758、24ページ)で測ってみました。1ページ目の図は、PDFの中では横1476ピクセルで入っています。ピクセルというのは画像を作っている点の数で、これが多いほど拡大しても崩れません。ところがページ全体を216 DPIで画像に描き直してから図の部分を切り出すと、横は655ピクセルくらいにしかなりませんでした。DPIは「1インチあたり何個の点で描き直すか」という指定なので数字を上げれば増えますが、紙面での表示幅が小さい図は、300 DPIにしても元の画素数に届かないことがあります。
その図が写真として入っているか、線として入っているか
貼り方を決める前に見るのはここだけになりました。PDFの中の図には二種類あって、写真やグラフが画像ファイルとして埋め込まれているものと、線と文字の描画命令として書かれているものがあります。前者なら中身をそのまま取り出せますが、後者にはそもそも取り出す画像が存在しません。私は自分でreportlabを使ってフローチャートと棒グラフだけのページを作って試したのですが、抽出の結果は0件でした。画面には0という数字が出るだけで、なぜ0なのか、次に何をすればいいのかは表示されず、保存ボタンが薄いまま押せなくなります。最初は自分の操作ミスだと思って三回やり直しました。線で描かれた図はどの解像度でも輪郭が崩れないので、こちらはページごと300 DPIで画像にしてから自分で切り出せば十分です。
実際にやっている手順
論文のPDFをそのまま「PDF画像抽出」に入れて処理を始めると、中央に結果のカードが並びます。カードにはファイル名と、その画像が出てきたページ番号、容量が出ます。24ページの論文を丸ごと入れたときは10件になり、10枚とも、PDFの中に保存されている画像と1ピクセルも違いませんでした。1ピクセルも違わないというのは、二枚の画像を重ねて引き算したときに差がどこにも残らない、という意味です。自分で作った確認用のPDFでも同じでした。1200×800の折れ線グラフを1枚だけ入れたPDFから抽出すると1200×800のまま戻ってきて、元の画像と全画素一致します。同じPDFをページごと216 DPIで描き直して図の部分を切り出すと680×454、300 DPIでも945×630にしかならないので、差は見た目にもはっきり出ます。
貼る前に確認していること
面倒なのはファイルの整理のほうでした。保存されるファイル名は元のPDF名に連番が付くだけで、ページ番号は入りません。複数枚あるときはZIPにまとまりますが、中も連番のまま平たく並んでいるので、後から開くとどれが何ページの図なのか分からなくなります。ページ番号は画面のカードにしか出ないので、私は保存する前にカードを見ながらメモに書き写して、展開した直後に図番号を付けて名前を変えるようにしました。ここを飛ばすと、結局もう一度PDFを開いて照合する羽目になります。
もうひとつ、しばらく勘違いしていたことがあります。取り出したPNGは元の画像とファイルとしては同じではありません。PDFの中では画像がPNGの形では保存されていないので、取り出すときに作り直されていて、容量も変わります。同じなのは画素の中身だけです。なので引用元の説明に「元ファイルそのもの」とは書かないようにしています。ついでに言うと、このツールは一度に1つのPDFしか処理できません。章ごとに分かれたPDFを何本も持っているときは順番に入れることになります。
図を引用していいかどうかは別の話で、これは抽出とは関係ありません。今回の論文はCC BY 4.0だったので、著者名と出典を書けば使えます。arXivの論文が全部そうというわけではないので、発表資料に載せる前に概要ページのライセンス表記を見るようにしました。学会がPDFを作る段階で図を小さく作り直している場合もあって、そうなると中に入っているのが既に縮んだ画像なので、抽出しても戻せるのはそこまでです。これを事前に見分ける方法はまだ分かっていません。使ったのはブラウザ上で動く画像ツールの https://imging.ai/ です。
