PostScript画像変換 ps2img

[| ]  最終更新: 2011/02/10 19:52:25

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の記述をダイレクトに画像ファイルにする機能もあります。


ps2imgの導入

必要なもの・環境

必要なもの:

いっぱつで動くことが期待されている環境: 困難が予想される環境:

ダウンロード

コマンド ps2img (2008/05/23, 2,210 bytes)
ライブラリ psimglib.pl (2008/05/23, 11,768 bytes)

ダウンロード後、適当なところに置いて、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(/png/bmp)

コマンドライン:

ps2gif (-d) <source> <destination> (<width> (<height> (<bgcolor>)))
引数: ※ width 以降の引数は省略できます。ただし、width だけ省略、といった扱いは できませんので、下記の説明にしたがって 0 を指定してください。

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

幅の指定は以下の2種類が可能です。

横幅のみ指定した場合は、縦幅は原図の縦横比を元に自動計算します。 逆に縦幅のみ指定した場合は、横幅を計算します。数値=0で、無指定扱いとなるため、縦のみ指定する場合は "0 縦幅" としてください。

color で背景色を指定することができます。これはスライドや、WEBページの背景色が指定されている場合などに、有用なオプションです。

このオプションを使うには、幅と高さを指定する必要がありますが、それらを指定するつもりがない場合は、0と指定してください。

tex2gif/png/bmp

コマンドライン:

tex2gif <TeX-text> <destination> (<mag> (<bgcolor>)))
引数: ※ mag 以降の引数は省略できます。ただし、mag だけ省略、といった扱いはできませんので、1 を指定してください。

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

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

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

変換時にエラーが出た場合、大抵は、入力テキストのミスですが、一目で分からない場合、-d オプションをつけて実行すると、platexのエラー出力が確認でき、また、作業ディレクトリ(/tmp)にそれらしい名前の中間ファイルが残されますので、それを確認してください。

eqn2gif/png/bmp

コマンドライン:

eqn2gif <TeX-equation> <destination> (<mag> (<bgcolor>)))
引数: ※ mag 以降の引数は省略できます。ただし、mag だけ省略、といった扱いはできませんので、1 を指定してください。

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

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

おまけで '\vect{x}'という制御綴りを追加してあります。これはボールドイタリックで出力するため、ベクトルや行列を記述できます。

環境変数

このツールは以下の環境変数を参照します。


実行例

tex2gif '\LaTeX' ps2img_1.gif 4
実行して得た画像1(LaTeXロゴ)
tex2gif '\LaTeX' ps2img_2.gif 4 #c0ffe0
実行して得た画像2(背景色指定)
eqn2gif 'y = f(x)' ps2img_3.gif 4
実行して得た画像3(簡単な数式)
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行で)
実行して得た画像4(複雑な数式)
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への依存性がそこそこありますので、ご参考まで。


利用上のご注意



熊谷正朗 [→連絡]
東北学院大学 工学部 機械知能工学科 RDE
[| ]