なんでそんなことを
PostScript はなんか近寄りがたい気がしていたのだけれど、線画を描いて文字を入れた画像を作る用があったので、PostScriptがいちばん手っ取り早そうであった。
PostScript のチュートリアルをググると Paul Bourke 氏の文章がでてきて、大変便利なんだけれど、いくらか補うこともある。
言語について
PostScript は言語としてはスタック言語である。それは何かと言う人は上記チュートリアルを見てほしい。数値や文字列のような値が書いてあって、それを処理するオペレータが後に来るというのが特徴。
たとえば 2 4 mul
とすれば 8
と書いたのと同じ結果を得る。まあ算術演算はやりたくなければ PostScript 作成前にやってしまえばいいけれど。
最低限処理系の使い方
ghostscript を使う。ただ $ gs foo.ps
とすれば Linux デスクトップであれば X(ツイッターではない)に絵がかかれるが、欲しいのは PNG 画像である。試行錯誤したのだけれど、次のようにすると 1024x1024 の座標にプロットするPostScriptから 1024x1024 の画像を作成することができる。
$ gs -q -sDEVICE=pngalpha -r72 -g1024x1024 -dBATCH -dNOPAUSE
-sOutputFile=output.png input.ps
最小のプログラム
最小のプログラムはただ showpage
と書く。
showpage
これでプリンタであれば白紙を1ページ打ち出すし、 pngalpha であれば透明画像がでてくる。X に絵を描くときは showpage がなくても出てくるのだが、 pngalpha の場合には画像が出てこないので頭を抱えた。Paul のチュートリアルにも地の文に showpage を書けと書いてあるのだが、例に書いていないのでかなり時間を溶かした。
以下いくつかの命令の話をするが、最後に showpage
を追加すると思って読んでほしい。
直線を引く
これで「>」型の折れ線が太さ 2 で緑色(127 255 127)で引かれる。座標値はここでは整数にしたが、小数表記も使える。色はモノクロであれば1引数の setgray を代わりに使える。
newpath
100 200 moveto
200 250 lineto
100 300 lineto
2 setlinewidth
0.5 1 0.5 setrgb
stroke
文字を書く
これで Courier フォント 12 ポイントで (200, 350) 点を左下にして「sample text」という文字が描かれる。文字列はカッコでくくる。カッコがネストすると内側は文字列値になるようだが、カッコ自体はバックスラッシュでエスケープするほうがプログラマ向きである。
/Courier findfont
12 scalefont
setfont
newpath
200 350 moveto
(sample text) show
ぬりつぶし
透明背景ではやりにくいという場合は白で塗りつぶしをしたいし、一度描いた図形の一部を消したいということがある。要は線を引く場合の stroke の代わりに fill とする。
newpath
0 0 moveto
0 1023 lineto
1023 1023 lineto
1023 0 lineto
closepath
1 1 1 setrgbcolor
fill