PostScript画像変換 ps2img
ps2img は Encapsulated PoscScript(EPS)ファイルを GIF/PNG/BMP に適宜拡大縮小しつつ変換するツールです。

論文などを執筆する際に、LaTeXは広く用いられています。 LaTeXで図を挿入する場合に、多く用いられるのが、EPS型式です。 UNIX用上で動作するドロー系ソフトやグラフツールはEPSを出力可能ですし、若干コツは要りますが、本家AdobeのIllustratorが出力するEPSファイルも挿入できます。

一方で、プレゼンテーションをする場合にはMicrosoft社のPowerpointを用いるというケースもよくあります(MS製品は嫌いでも)。 私はJustSystemの花子を使っていますが、いずれにせよ、EPSは直接扱い難く、論文に書いた図と同じようなものをわざわざ書き直すこともありました(実際、そのほうが見栄えも良くなるので)。
また、似たようなケースですが、WWWで情報公開する場合も、EPSは普通のブラウザで直接表示できないため、変換する必要があります

このような場合、EPSファイルを適当な画像ファイルに変換して、挿入してしまえばいいのは確かですが、gsのコマンドをごちゃごちゃ打ち込むのは面倒ですし、gvで表示させておいてキャプチャというのも手間がかかります。 そこで、EPSファイルを指定したサイズに拡大縮小し、指定した画像型式のファイルとして出力する、ps2img を開発しました。

長いこと、ps2gif だったのですが、昨今のgifに対する微妙な圧力を考慮し、PNG や Windows Bitmap も出力できるようにしました。 また、スライドに綺麗な数式を貼り込めるように、LaTeXの記述をダイレクトに画像ファイルにする機能もあります。

必要なもの:
  • Perl 5( 他のバージョン未検証)
  • ちゃんと設定されたghostscript
  • ちゃんと設定されたplatex(LaTeXを使う場合)
  • ちゃんと設定されたdvips(LaTeXを使う場合)
  • ppm, pnm を操作するライブラリ
    ppmquant, pgmtoppm, pnmscale, ppmtogif, ppmtobmp, pnmtopng
いっぱつで動くことが期待されている環境:
  • Redhat Linux 6.x (LASER5 6.0で確認)
  • Redhat Linux 7.x (Redhat 7.1で確認)
困難が予想される環境:
  • Windows (使用ツールの用意が大変)

ダウンロード後、適当なところに置いて、chmod +x で実行属性付加。

  1. 環境に依存する設定
    • パス設定:
      ps2img から psimglib.pl を呼び出せるように冒頭の @INC に psimglib.pl を格納したディレクトリを設定してください。
    • 簡単な設定:
      もし、普段platexなどをお使いのRedhat6系のシステムがありましたら、恐らく、そのまま動きます。psimglib.pl の dvipsの項のみ、チェック下さい。
      もし、普段platexなどをお使いのRedhat6系のシステムがありましたら、psimglib.pl の dvipsの項のみ、チェック下さい。
    • 内部で使用するコマンドの設定:
      psimglib の冒頭に "$CMD_なんたら" の定義があります。 これらはそれぞれ内部で使用するコマンドで、system() で呼び出すためにパスが通っているか、絶対パスで用意する必要があります。 シェル上で ppmquant と入力して、not found しなければ、絶対パスで書く必要はないでしょう。$ColorFile は X11 の色変換テーブルファイルで、rgb.txt を探し出して指定してください。色指定を常にRGBで行う場合は必要ありません。
    • dvips のオプション:
      dvipsはそのバージョンなどによって、ダイレクトにプリンタに出力されたりします。 また、環境によって変わるようなので、「なんたら.dvi を なんたら.ps」に変換するコマンドになるように設定してください。
    • 作業ディレクトリの指定:
      $tmpdir に作業ディレクトリを指定して下さい。
    • fileコマンドの出力解釈:
      ある意味、ここが難儀です。すでに出来ている画像ファイルの型式同定のため、file コマンドを使用します。 ImageSize サブルーチンでその解析を行っていますが、これらは、
      test.bmp: PC bitmap data, OS/2 1.x format, 705 x 294
      test.gif: GIF image data, version 87a, 235 x 98,
      test.png: PNG image data, 235 x 98, 4-bit colormap, non-interlaced
      
      のような型式に対応して設定してあります。 もし、違う型式で出てくるようでしたら、Perlをご存じ無くとも なんとなく見当がつくと思いますが、サイズのところが (\d+)に相当するように、適宜書き換えてみてください。
      なお、設定できなくとも致命的ではありません。 ただ、「前に作成した画像と同じか」の判定ができなくなるために、毎回変換するようになります。
    • 調整の参考:
      各コマンドのオプションで -d を指定するとデバッグモードになり、実際に実行される内部コマンドや、エラー出力が確認できます。 また作業ディレクトリには中間ファイルが残されますので、動作不良の場合には、この辺りを参考にしてみてください。
  2. 環境に依存しない設定
    • このツールは実行型式は ps2img ひとつのみで、これに特定の名前のシンボリックリンクを張ってつかいます。たとえば、 ln -s ps2img ps2gif とした場合、ps2gif コマンドが、EPSファイルをGIFファイルに変換するコマンドになります。
      "2"の前には元型式で "ps" "tex"(TeXソース型式) "eqn"(TeX数式型式)、"2"のあとには "gif" "png" "bmp" を組み合わせます。
      必要なものをシンボリックリンクで作成してください。
コマンドライン: ps2gif (-d) ( ( ())) 引数: 変換するEPSファイル(略不可) 変換後の画像を保存するファイル名(略不可) 出力画像の横幅(以降略可) 出力画像の縦幅(以降略可) 背景色(以降略可) デバッグモード(略可) ※ width 以降の引数は省略できます。ただし、width だけ省略、といった扱いは できませんので、下記の説明にしたがって 0 を指定してください。

sourceを画像に変換しdestinationで指定したファイルに格納します。 特に出力サイズを指定しなければ、PostScriptの座標単位(多分ポイント)をそのまま1ピクセルに対応させます。 また、destinationとsourceの更新日および画像サイズを比較し、必要がなければ変換をスキップします
(背景色は未チェックのため、色のみ変えるdestinationを削除後に変換する必要あり)。

幅の指定は以下の2種類が可能です。 ピクセルとして解釈 PostScriptの1ポイントを指定したピクセル数として拡大縮小(小数可) 横幅のみ指定した場合は、縦幅は原図の縦横比を元に自動計算します。 逆に縦幅のみ指定した場合は、横幅を計算します。数値=0で、無指定扱いとなるため、縦のみ指定する場合は "0 縦幅" としてください。

color で背景色を指定することができます。これはスライドや、WEBページの背景色が指定されている場合などに、有用なオプションです。 red, blueなどの色名で指定します。
(上記、rgb.txtの設定に関する項目参照) 3原色RGBをそれぞれ2桁の16進数で指定します。
このオプションを使うには、幅と高さを指定する必要がありますが、それらを指定するつもりがない場合は、0と指定してください。 コマンドライン: tex2gif ( ())) 引数: 変換するTeXの構文(略不可) 変換後の画像を保存するファイル名(略不可) 出力画像の倍率(以降略可) 背景色(以降略可) デバッグモード(略可) ※ mag 以降の引数は省略できます。ただし、mag だけ省略、といった扱いはできませんので、1 を指定してください。

TeX-text をLaTeXのソースとしてplatexでコンパイル(jarticle, 12pt)して、destination に出力します。 また、destination.tgi というファイルに変換情報を残し、前回の情報と、今回の要求を比較して、必要がなければ変換をスキップします
(何らかの理由で強制的に再変換するには tgi ファイルを削除する)。

引数 mag は出力の倍率を指定するもので、1のとき(多分)1ポイント1ピクセルで出力されます。LaTeXの場合、横幅の予想がつきにくいため、倍率指定のみになっています。

引数 color の背景色指定は上述のps2gifと同様です。

変換時にエラーが出た場合、大抵は、入力テキストのミスですが、一目で分からない場合、-d オプションをつけて実行すると、platexのエラー出力が確認でき、また、作業ディレクトリ(/tmp)にそれらしい名前の中間ファイルが残されますので、それを確認してください。 コマンドライン: eqn2gif ( ())) 引数: 変換するTeXの数式(略不可) 変換後の画像を保存するファイル名(略不可) 出力画像の倍率(以降略可) 背景色(以降略可) デバッグモード(略可) ※ mag 以降の引数は省略できます。ただし、mag だけ省略、といった扱いはできませんので、1 を指定してください。

TeX-equationをLaTeXの数式としてplatexでコンパイルして、画像に変換しdestination に出力します。tex2gifに \begin(end){eqnarray}を追加したものです。スライドなどに綺麗な数式を貼りたいときに、原稿から抜いてきた数式をこれで変換すると楽です。

引数 mag , color はtex2gifなどに準じます。

おまけで '\vect{x}'という制御綴りを追加してあります。これはボールドイタリックで出力するため、ベクトルや行列を記述できます。 このツールは以下の環境変数を参照します。
環境変数MONOIMGを1に設定すると、出力画像はモノクロになります。 もともとモノクロのPostScriptファイルを処理する際に、モノクロモードにすると、gsの制限が緩和され、変換可能な画像サイズが大きくなります。 無指定の状態で、正常な変換が出来ない場合、また、大きすぎるとエラー出力された場合に、MONOIMGを1に設定すると、通るかもしれません。
解除するには、環境変数を消去するか、0に設定してください。


標準では、一旦2倍の解像度の画像を生成して、それを1/2に縮小することで、アンチエイリアシングを行います。 こうして作られた画像は、画面で見るには概ね見やすいものとなりますが、これを挿入したスライドなどを印刷すると、プリンタの特性との兼ね合いで、本来ただの黒線だったものが、カビが生えたように印刷されることが多々あります。 そのため、NOSMOOTHを1に設定して、2倍の解像度のファイルを生成し、それをスライドに挿入すると印刷して見栄えのいいものとなります(大抵のソフトは画面表示する際に適宜スムージングしてくれますので問題なし)。
なお、gifなどで保存する場合、圧縮率の関係上、NOSMOOTH=1で2倍の解像度の図をつくってもそれほどファイルサイズは変わりません。 bmpの場合は4倍のサイズになる可能性があります。
解除するには、環境変数を消去するか、0に設定してください。 tex2gif '\LaTeX' ps2img_1.gif 4 tex2gif '\LaTeX' ps2img_2.gif 4 #c0ffe0 eqn2gif 'y = f(x)' ps2img_3.gif 4 eqn2gif 'r_{i,j}(t)&=&e_{i,j}(t)\cdot\sin\omega_i t\nonumber\\ &=&K_{Ci}~\vect{c}_i\cdot\vect{v}_j~\{1-2\cos(2\omega_i t)\}/2' ps2img_4.gif 2 (1行で) setenv NOSMOOTH 1 ; tex2gif 'a' ps2img_5ns.gif 2 setenv NOSMOOTH 0 ; tex2gif 'a' ps2img_5s.gif 2 スクリプト: #! /usr/local/bin/tcsh -f setenv NOSMOOTH 1 ps2gif ../detectsys.eps detectsys.gif 1920 ps2gif ../excitesys.eps excitesys.gif 1920 ps2gif coopfield.eps coopfield.gif 800 # これを変えれば適当に一発。 set MAG=8 eqn2gif '\Phi_{i,j}(t)=S~B_{Ci}~\vect{c}_i\cdot\vect{v}_j~\cos\omega_i t' eqn1.gif $MAG eqn2gif 'e_{i,j}(t)&=& K_{Ci}~\vect{c}_i\cdot\vect{v}_j~\sin\omega_i t' eqn2.gif $MAG eqn2gif 'R_{i,j}&=&K_{Ci}~\vect{c}_i\cdot\vect{v}_j/2' eqn4.gif $MAG

ps2img, tex2img ともに背景色はrgb.txtの色名で指定できますが、どんな色があって、どんな色になるかはやってみなければわかりません。 そこで、色見本をつくりました。

色見本ページ:
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
(大量に画像が貼ってあるので激重注意, XF86-4)

色見本生成スクリプト等:
ディレクトリインデックス
makecolors.pl: 本体 (ps2gif 必須)
template_tb.eps: 黒線テンプレート
template_tw.eps: 白線テンプレート
以上を適当なフォルダにいれてmakecolors.pl実行。

注意:これらはあくまでps2imgほか、X11のrgb.txtを参照するソフトで使用可能ないろであって、よくあるHTMLで指定できる色見本とは異なります(そのため、わざわざgifにしているわけですが)。また、OSへの依存性がそこそこありますので、ご参考まで。

  • 本ソフトウエアはフリーソフトウエアです。自己責任でご自由にお使い下さい。 なんらかの改良版を開発いただいた場合にお知らせいただければ幸いですが、改良などに際し、ソース公開(公開したらそれ自身がソースとも言えますが)などの強制はしません。
  • 他の画像への対応要望などには、現実逃避したくなっているとき以外は、応じられないと思いますが、バグなどは下記アドレスまで頂ければ幸いです。