まとめ
この記事でお伝えしたいことは
- ベクタ画像はラスタライズするな
- ラスタ画像は(必要最小限の状況を除き)編集したり不可逆圧縮したりするな
の2点です.
上記の意味が分かる方は,この記事を読む必要がありません.逆に意味の分からない方は,今後LaTeXで画像を表示する際に問題を引き起こすことがあるので,できればこの記事をご確認ください.
なお,今回は論文を作成する際に,LaTeXを使ってPDF文書に画像を埋め込むという用途を想定しています.それ以外の用途の場合,最適解が異なる可能性があります.
2種類ある画像形式
この世には様々な画像形式(.jpg, .png, .psなど)がありますが,大きくベクタ画像とラスタ画像に分けられます.
ラスタ画像
ビットマップ画像とも呼ばれるもので,ピクセルと呼ばれる四角い領域が敷き詰められたものです.内部的には多次元配列に値が入っているようなデータ構造になっています.そのため,自然数倍の拡大(2倍や3倍)を除いて,画像を拡大縮小するとボケて劣化します.
ラスタ画像はさらに可逆圧縮と不可逆圧縮に分けられます.
可逆圧縮とは,その名の通り完全に元の画像に戻すことができる形式です.ウィンドウズのビットマップ形式(.bmp)はそもそも圧縮をしていませんが,こちらに分類して良いでしょう.他にもPNG形式(.png)があります.ざっくりと言えば,画像の頻出パターンを効率よく保存することで,画像のファイルサイズを小さくしています.元の画像の情報を完全に保存しているので,編集したり保存し直したりしても,意図せずデータの中身が変わることがありません.
不可逆圧縮とは,画像を元通りに戻せない形式です.不可逆圧縮は,目に見えないちょっとした濃淡などを消してしまうことで,画像のファイルサイズを大幅に小さく出来ます.特に写真のような自然画像では,あまり見た目を損なうことなく遥かに小さいファイルサイズで画像を保存できます.代表例がJPEG形式(.jpg, .jpeg)です.ファイルサイズを下げることを優先すると,JPEG形式なら色の境界付近に汚れのようなノイズ(モスキートノイズ)や滑らかな色の変化がガタガタになるノイズ(ブロックノイズ)が発生します.
つまり,せっかくPNG形式の画像を持っているのに,JPEG形式の画像に変換すると画質が落ちます.さらにJPEG形式の画像を編集して再度JPEG形式で保存すると,そのたびに不要な部分を判定して消してという処理が入るため,画質が落ちます.
ファイルサイズが大きくなりすぎるなど,やむを得ない場合を除いてPNG形式を使い,JPEG形式は避けるのが無難です.また編集中はずっとPNG形式にままにしておき,最後でのみJPEG形式に変換しましょう.最初からJPEG形式の画像は,繰り返しの編集を避けるか,不可逆圧縮の状態で編集し最後にJPEG形式に戻しましょう.また画像サイズを変えたい場合は,LaTeXファイルでサイズを指定すればよく,元の画像を拡大する必要がありません.
※正確にはPNG形式でも減色をすれば不可逆圧縮になりますし,JPEG形式にも可逆圧縮形式もありますが,今回は省きます.
ベクタ画像
ベクタ画像とは直線や円といった図形を組み合わせて作られた画像です.最大の特徴はいくら拡大縮小しても劣化しないことです.これは,画像をピクセルに区切っておらず,正方形なら正方形,円なら円を描くようなプログラムが入っているためです.円なら円のまま拡大してもピクセルが見えて凸凹するようなことがありません.
形式として,PDF形式,PS形式,EPS形式,SVG形式などがあります.PDF形式やEPS形式といえば,画像というより文章のファイル形式と思われがちですが,画像を表示することも出来ます.一般にこれらの形式な内部でラスタ画像を格納し,表示することもできます.例えば,写真が入っている文書のPDFファイルは,写真の部分だけラスタ画像です.
またベクタ画像はラスタ画像に変換することが出来ます.これをラスタライズといいます.しかし画像はピクセルの集合になってしまうため,ラスタライズされた画像を拡大すると凸凹が目立ちます.gnuplotやmatplotlibのようなプログラムやライブラリで作成したグラフは直線や円の集合であり,内部的にはベクタ画像です.そのため,保存する形式としてラスタ画像を選んでしまうと,ラスタライズされ,拡大したときに非常に見づらい画像になってしまいます.
そのためグラフはベクタ画像(特にPDF形式)で保存し,LaTeXに使いましょう.ベクタ画像を編集したい場合,Adobe Illustratorなどのアプリケーションを使う必要があります.PDF形式は中身がテキストデータですので,頑張れば手動で書き換えられます.余白を削除するだけならpdfcropを使いましょう.
最初からラスタ画像であるなら,ベクタ画像に変換するメリットは特にありません.LaTeXのバージョン等によってはPDF形式が画像として使えないことがあります.その場合はそもそもLaTeXのバージョンを変えてみましょう.学会では論文の画像にEPS形式が指定されているところもあります.
※膨大な点が書かれた散布図などは,ベクタ画像のままだと重すぎて表示が遅くなるため,ラスタライズしたほうが扱いやすい場合もあります.
画像の変換
画像形式の変換にはImageMagickがおすすめです.
パワーポイント
論文などに掲載する概念図をパワーポイントで作成している方も多いのではないでしょうか.パワーポイントで図形を組み合わせて作った画像はベクタ画像です.そのため,ラスタ画像(PNG形式など)で保存するのはもったいないです.以下のような手順でベクタ画像としてPDF形式で保存されます.
-「ファイル→エクスポート→PDF/XPS ドキュメントの作成」
-「ファイル→名前をつけて保存」からPDF形式を選択して保存
-「ファイル→印刷」でプリンターにWindowsなら「Microsoft Print to PDF」を選択して印刷(=保存)
手順ごとに,またパワーポイントのバージョンやら環境やらで変換に使うドライバが異なるため,少し結果が変わります.私の環境では印刷した場合に半透明部分がラスタライズされました.どの方法ならラスタライズされないか確認してください.
基本的にパワーポイントは貼り付けられたラスタ画像を再圧縮します.「ファイル→オプション→詳細設定→イメージのサイズと画質→ファイル内のイメージを圧縮しない」をオンにすることで,保存時の再圧縮は防げます.しかし,私が知る限りPDF化する際に必ず再圧縮されます.されない方法があれば教えてください…….上記のPDF化する方法ごとに,再圧縮の方法が変わって結果が変わります.
再圧縮する仕様のため,画像を並べたり注釈をつけたりするときにパワーポイントを使うと画像が劣化します.そのため,パワーポイントにはなるべくラスタ画像を貼らない,もしくは十分画質がよく再圧縮に耐えられるラスタ画像を使ってください.
具体例
たとえば画像を並べて大きな図を作る場合,以下のような方法が考えられます.
- 大きな画像に並べてPNG形式で保存する
- LaTeXファイル内で画像を並べてコンパイルし,実質的に大きな画像のように扱う
- 2の方法で作ったPDFを切り抜いて画像として扱い,LaTeXに与える
基本的に2の方法がおすすめです.ただ,画像を1枚ずつ別ファイルで提出するよう指示のある論文誌では使えません.その場合,ファイルは煩雑になりますが,3の方法がおすすめです.