コンピュータ基礎I(PostScript)
コンピュータ基礎Iで学んだPostScriptについてまとめておきます。
一部の課題にも関係しますが、調べるとあまり情報が出てこなかったので、必要だと感じた部分は後でもわかるように、情報をまとめておきます。
手でスクリプトを打ち込むようなことは無いと思いますが、もしEPSファイルを出力するプログラムを作るようなことになったら役立つと思います。
PostScriptを打ち込んでEPSファイルを作ることができます。 メモ帳などのテキストエディタに打ち込み、保存時に拡張子を.epsにするだけで作成が可能ですが、表示するためにはillustratorなどのアプリケーションが必要です。
基本的な書き方
基本構造部分
epsファイルとして開けるようにするために、いくつか必須部分があります。
- 1行目には必ず「%!PS-Adobe-3.0 EPSF-3.0」コメントが必要です
- BoundingBoxコメントを使って作る必要があります
BoundingBoxは、実際の画像がページ上のどこにあるかを示すために使用されるということですが、あまりよく理解できていません。
%%BoundingBox: 72 150 144 170
と書かれている場合は、そのファイルの画像は左下(72, 150)と右上(144, 170)の座標で作られる矩形の中に画像があることを表しているということです。
講義では%%BoundingBox: 0 0 595 842
としていたので、とりあえずこの数値を使います。
コメントを残したい場合、%をコメントアウトとして使用できます。%より右にあるものはコメントとなるので、プログラムには影響しません。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 %コメント %描画部分
図形描画の方法
図形を描く場合は、座標を指定してきパスを繋いでいきます。最後にそのパスに沿って、線を引いたり塗りつぶしたりします。
具体的な方法としては、newpath
で線の書き始めを宣言します。そのあとにパスを繋いでいき、stroke
でパスに沿って線を引きます。
座標は左下が(0 , 0)で、縦方向がy、横方向がxです。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 %コメント newpath %パス指定 stroke
線の描き方
newpath
で先の下記はじめを宣言したあと、moveto
で線を書き始める初期位置を設定します。次にlineto
で座標を指定すると、前の座標からその位置までパスを引きます。指定した座標間は、真っ直ぐな線で繋がれます。
最後にstroke
を書いてパスに沿って線を引きます。
x point y point moveto
x point y point lineto
下記の例では、(100, 200)から(300, 400)まで、線を引いています。表示すると、左下から右上に斜めに線が引かれます。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 300 400 lineto stroke
lineto
を増やすと、折れ曲がった線を描くことができます。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 200 100 lineto 300 400 lineto stroke
曲線の描き方(ベジェ曲線)
曲線を描く場合は、curveto
を使います。数値にすると非常にわかりづらくなりますが、(x1, y1)と(x2, y2)を制御点とした(x3, y3)までの曲線を描画します。
x1 y1 x2 y2 x3 y3 curveto
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 100 50 100 150 200 300 curveto stroke
多角形の描き方
多角形を書きたい場合はclosepath
を使います。このコードは、現在の位置から書き始めの位置までパスをつなぎ、パスを閉じます。
この例では、(100, 200)と(200, 200)と(200, 300)の位置に頂点を持つ三角形が表示されます。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 200 200 lineto 200 300 lineto closepath stroke
四角形の場合は、もう1点を追加します。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 200 200 lineto 200 300 lineto 100 300 lineto closepath stroke
このように、頂点を増やしていけば好きな多角形を描けます。
応用
複数の図形を書く
複数の図形を書きたい場合は、newpath
からstroke
までの指定を増やせば描画するものを増やすことができます。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 50 200 moveto 200 100 lineto 300 400 lineto stroke newpath 300 500 moveto 400 400 lineto 400 500 lineto closepath stroke newpath 100 200 moveto 200 200 lineto 200 300 lineto 100 300 lineto closepath stroke
線の太さ
線の太さは描画する前にsetlinewidth
を使って設定します。
太さはポイントで指定します。
width setlinewidth
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 300 400 lineto 5 setlinewidth stroke
線に色を付ける
線に色を付ける場合は、色を指定してから線を引きます。
色はsetrgbcolor
を使ってRGBで指定するか、setcymkcolor
を使ってCYMKで指定する方法があります。
red green blue setrgbcolor
cyan magenta yellow black setcymkcolor
どちらの場合も、数値は0(最小)から1(最大)の間で設定します。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 300 400 lineto 5 setlinewidth 0.5 0.7 0.8 setrgbcolor stroke
多角形を塗りつぶす
多角形に色を付ける場合、パスを指定したあとにstroke
ではなくfill
を書きます。
現在設定されている色で塗りつぶされますが、初期状態では黒く塗りつぶされます。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 200 200 lineto 200 300 lineto 100 300 lineto closepath fill
fill
の前に色を指定すればその色で塗りつぶされます
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 200 200 lineto 200 300 lineto 100 300 lineto closepath 0.3 0.3 0.8 setrgbcolor fill
相対値で指定する
図形のパスを指定するとき,moveto
やlineto
を使いますが、この場合は絶対座標での指定となります。頭にrをつけたrmoveto
やrlineto
を使用すると、相対座標での指定(今いる位置からどれだけ移動するか)となります。相対位置のほうがわかりやすい場合もありますが、プログラムが始まった最初の位置やstroke
を行ったあとの位置は不定(どこにあるかわからない状態)となるので、moveto
は絶対座標で指定したほうが良さそうです。
%!PS-Adobe-3.1 EPSF-3.0 %%BoundingBox: 0 0 595 842 newpath 100 200 moveto 200 200 rlineto 200 300 rlineto closepath fill
講義では、「showpage」で描画したものを画面に表示すると説明していましたが、参考にしたページでは下記の記述がありました。記述しても問題はないと書かれていて、実際に問題なく動くのでどちらでもいいのかもしれません。
Finally, the EPS file should not use showpage. Actually, Adobe says that it is fine to use showpage in your EPS files. Officially, it is the responsibility of the importing application to redefine showpage so that the EPS file does not actually eject the page. Still, in creating EPS files, it would be wise not to use this operator.
最後に、EPSファイルはshowpageを使用すべきではありません。 実際には、EPSファイルにshowpageを使用することは問題ありません。 公式には、EPSファイルが実際にページを排出しないように、showpageを再定義するのは、インポートするアプリケーションの責任です。 それでも、EPSファイルを作成する場合は、この演算子を使用しないことをお勧めします。
このほかにもいろいろと描き方があるようですが、調べたりまとめたりしていると終わりがないので、PostScriptはこれくらいで終わりにしておきます。ほかにも知りたいものがある場合は、参考ページの「Index of Examples」や「Index of Operators」を見ると多くの情報が載っています。
参考ページ: A First Guide to PostScript