PostScriptで名刺を作る
いきさつ
民間にいた時は名刺は会社持ちで,
いくつかのパターンから選んで作成できました.
デザイナーの人たちは,
名刺で値踏みされる可能性もあるので,
自腹で自分のデザインのものを作成していたようでした.
あと,自宅住所を入れたい人も,自腹でした.
公務員になったら,
なんと全部自腹ということで,
公的情報だけの名刺は公費で支払うべきと総務に掛け合ったけど埒があかず,
しょうがないので最初のバージョンはLATEXで作成しました.
通り一遍のものは出来ましたが,
いまいち不満だったので,
たまたま手近にあったプリンタのコマンド(LIPSIII)で直接印刷してみました.
プリンタ制御言語で直接印刷というのは,
PC-PR201の時代からずーっとやってきたことなので,
特に違和感なく,
まあまあのものが作成できました.
こういった場合の専用の環境として,
MS-DOS+N88BASIC ver.1.0を使いました.
MS-DOS+N88BASICの組合せで,
唯一これだけが,
様々な制御コードを直接プリンタポートに出力できる重宝なもので,
PC-PR時代からかなり長く使いました.
別の選択肢として,
plainTEXで書くというのもありましたが,
単にそれまでの経験の延長上で,
プリンタ制御言語を直接いじるという選択を,
あまり深く考えないでそうしたということです.
もちろん,plainTEXでも,
プリンタ制御言語と同等レベルのことが出来ますが,
同等ならわざわざ屋上屋を重ねる必要はないわけですし,
自動化するにしてもTEXによる処理と,
それによって出来たdviファイルを出力する処理が必要となります.
基本的には,plainTEXやdviファイルは
「汎用の版面データ記述システム」であるわけですが,
当初は余りそういう認識はなかったと思います.
その後,PostScriptプリンタが利用できるようになったので,
プリンタ制御言語をPostScriptに変更しました.
これは,他の多くのプリンタ制御言語とは異なり,
全部文字コードで記述可能なので,
N88BASIC ver.1.0
などというものは不要となりました.
これが,PostScriptとのつきあいの始まりです.
PostScriptやpdfは「汎用の版面データ記述システム」
をかなり意識していますが,
PostScriptはプログラム言語の側面が大きいのが面白いと思います.
ただ,1999年以降は,
PostScript3のままで開発が止まっている様なのが残念です.
アルファチャネルやレイヤー,変数陰蔽などが楽に扱えるような,
PostScript4の出現を期待したいところです.
pdfはISOに移管されたわけですが,
PostScriptもISO等に移管されて,
みんなでいじり回すのが良いのではとも思います.
svg+Javascriptも面白いですが,PostScriptの場合,
描画機能と言語機能が融合している点に味があると感じています.
その後,
ずっとこれで良かったのですが,
最近になって,
名刺も何か色が付いているものが多くなり,
白黒だけの名刺はだんだん見劣りがするようになりました.
組織形態も変化して,
組織のロゴというか,
カラー紋章(白黒版もあるにはあるが)を使うようにというお達しも出るようになったので,
これも含めて名刺を作り直すことにしました.
作成の実際
本文部分
従来の白黒のものから,
特に変化はさせませんでした.
/DFKaiSho-Md-MP-RKSJ-H findfont 11.6 scalefont setfont
14.3 mm 37 mm moveto
<8fe3 90c8 8ca4 8b86 88f5> show % 上席研究員
と言ったぐあいに,
1枚分の版面の中に,
場所を指定し,
情報を置いていきます.
但し,
OSXのPrewiewは,
ダブルクリックないしドラグアンドドロップで.psファイルを表示できて,
PostScriptのプログラミングには非常に都合がよいのですが,
日本語フォントはなぜかOsakaしか認識しないので,
以下の作業をする時には,
Osakaに変更して行いました.
ロゴ
組織(農研機構)のロゴが制定され,
利用するようにと言われているので,
これを使うということで検討を始めました.
ロゴは文字+絵で出来ていて,
.ai, .eps, .tif, .gifのファイルがカラー版と白黒版で配布されています.
何れもファイルサイズが大きく,
Postscriptで利用する場合には,
様々な回避手段はあるものの,
必ずしも使い易いものではありません.
強拡大画像を見ると,
かなり細かいところまで作り込んであるように見受けられましたが,
1,
2cmのサイズで使う場合には,
細部の微妙な差は認識できません.
従って,
小サイズ専用の簡略版を作成すれば,
名刺などに使いやすいと思われましたので,
作成してみることにしました.
まず正規版と簡略版の比較を容易にするため,
白黒画像をテンプレートとして選びました.
要するに,白黒画像の上に,
自作のカラーパーツを載せていくということです.
epsファイル(935KB)として配布されていたものは,
A4サイズで他の情報も含まれていたので,
中心部にあるロゴ部分だけを,
PostScriptプログラムとして切り出して出発点にしました.
画像のコードを実際に切り出したところ,
鏡像になっていたので,
切り出した画像全体を,
更に鏡像にして表示する修正を行ったものをAファイル
(12KB)としました.
ファイルのごく一部の,
最上段白抜の四角形1個を描いている部分を提示してみます
(わかりにくいので,以下のコードでは白ではなくて黄色).
なお,座標値の単位は,PostScriptデフォルトのポイントです.
%Aファイル 白抜四角1個目
139.214 148.244 mo 139.214 150.335 ln
375.303 150.335 ln 375.303 148.244 ln
139.214 148.244 ln 0 0 1 0 cmyk f
このファイルの座標指定の有効数字が小数点以下3〜4桁なのですが,
小さなロゴとしては不必要な精度であるので,
四捨五入で1桁で丸めたものをBファイル(9KB),
%Bファイル 白抜四角1個目
139.2 148.2 mo 139.2 150.3 ln
375.3 150.3 ln 375.3 148.2 ln
139.2 148.2 ln 0 0 1 0 cmyk f
同じく四捨五入で整数化したものをCファイル(7KB)としました.
%Cファイル 白抜四角1個目
139 148 mo 139 150 ln
375 150 ln 375 148 ln
139 148 ln 0 0 1 0 cmyk f
このように通常のアプリを用いて,
普通にベクトル画像を作成すると,
記録された座標値は,
小数点以下の桁数がかなり多いです.
これは,
ベクトル画像の特徴である,
強拡大をしても破綻しないためにその様になっているわけです.
逆にデザイン上問題がなければ,
整数値の座標で十分なこともあり得ます.
人間の目は視力1.0で空間角度分解能が1分角(角度1度の1/60)なので,
明視距離(25cm)にある2点が別れて認識されるためには,
250mm×tan(1/60)=0.0727220542190…mm離れている必要があります.
一方,
1point=1/72inchなので,
1inchを25.4mmとすると、1pt=0.35277…mmであるので,
視覚の分解能は,
0.20614112620…ptとなります.
従って,
現在あるオリジナルベクトル画像をそのままのサイズで利用する場合には,
座標値を分解能より小さい0.2ptごとに正規化しても,
原画像とは区別が出来ません.
Bファイルのように小数点1位に丸めれば,
2倍の拡大まで問題は発生しません.
1/5以下のサイズに縮小して利用するならば,
Cファイルのように整数化しても良いなどということが言えます.
希望のサイズで表示する際に,
整数化したファイルを使いたい場合には,
座標値を実寸でそのサイズの5倍となるようにスケーリングした上で整数化し,
1/5に縮小して利用すれば破綻しません.
これらのことから直ちに,有効数字が小数点以下3桁であることは,
もし原図に論理的破綻がなければ,
200倍まで拡大可能ということになります.
それ以上に拡大すると,
少なくともアラが目立ってくる可能性が出て来ます.
もちろん,座標指定を整数化したとしても,例えば,
2点を結ぶ直線が整数化された経路を通るということではありません.
これだと,多くの直線が階段状になってしまいます.
実際にはそういうことは起きなくて,
整数座標で指定された始点と終点を結ぶ,
ぎざぎざしていない直線になります.
但し,厳密に言えば,
この直線も実際に印刷または表示された場合には,
出力装置の分解能単位で階段状になっている,
ということはありますが…
(これは実際に観察できます.単に拡大して眺めればよいのですが,
より分かりやすいのは,
直角又は水平に近いけど斜めの直線を見るのが良いです).
というようなわけで,この様な考え方に基づき,
以下の作業を行いました.
このように整数化されたCファイルに対して,
短縮されたコマンドを元に戻し,
そのままだと鏡像になっている座標値を正像になるよう修正し,
鏡像表示コマンドを削除し,
文字と同様オブジェクト左下端を原点としたものが,
Dファイル(8KB)です.
コマンドを標準綴りに変えたので,
ファイルサイズが大きくなりました.
%Dファイル 白抜四角1個目
0 252 moveto 0 250 lineto
236 250 lineto 236 252 lineto
0 252 lineto 0 0 1 0 setcmykcolor fill
図形の記述も冗長ですので,
①4個のcurveto命令で作成されていた円を1個のarc命令に変更,
119 158 103 0 360 arc
②10個のサイズの異なる長方形で作成されていた白抜きを,
変数座標指定で1個の長方形を定義し,
for…nextループで回すように変更,
1 1 10{0 ypos 236 height rectfill new} for
③アウトラインで定義されていたフォントを文字として再定義,
/Arial-BoldMT findfont 59 scalefont setfont
24.9 1 moveto 4.3 0 (NARO) ashow
の処理を行い,
背景の記述を短縮したEファイル(6.4KB)を作成しました.
更に苗(子葉?)の記述に関して,
④多数のcurveto命令で作成されていた葉の内部輪郭を2個のcurveto命令を使った1個の輪郭に変更,
/core{61 39 9 31 0 0 28 -17 69 1 67 22 0 0 moveto curveto curveto}def
⑤この輪郭を用いて大小葉の中側の黄色い葉身と外側の緑色の輪郭を描画,
/loutcore{0.18 0 0.91 0 setcmykcolor core fill core 0.79 0 0.87 0.56 setcmykcolor stroke grestore}def
/lout{gsave translate 6.5 setlinewidth loutcore }def
/slout{gsave translate 8 setlinewidth 0.48 0.48 scale loutcore}def
⑥胚軸と主根を任意の長さで描画する手続を作成し,
パラメータ指定で大小のものを描画,
/ax{3 1 roll translate dup /yup exch def 9.3 mul 126 div 4 add /xwid exch def 0 0 2 0 360 arc fill
2 0 moveto xwid 4 sub 2 div yup rlineto xwid neg 0 rlineto xwid 4 sub 2 div yup neg rlineto closepath fill}def
⑦多数のcurveto命令でその輪郭を定義するように作成されていた1本の側根(根毛?)を1個の先丸の太い線分によるarc命令に変更したものを5本作成する,
/hair3{4.2 setlinewidth 1 setlinecap -34.625 84.7 38 270.5 330 arc stroke -20.625 50 20 265 340
arc stroke -14.125 28.9 14 280 340 arc stroke}def
/hair2{2.8 setlinewidth 1 setlinecap -16.625 37.4 16 266 340 arc stroke -9.125 19.3 9 272 340
arc stroke}def
といったことで記述を短縮したFファイル(1.5KB)を作成しました.
④の作業は,Illustratorで行いました.
線の端点や制御点をどうしたらよいかは,
CUIでは多数回の試行錯誤が必要となります.
GUIではマウスによる座標値操作が,直ちに図に反映します.
それを見ながら最適な図形形状が決められるので,
効率的です.CUIとGUIはうまく使い分けるのが良いと思います.
結局,
図形要素(オブジェクト)としては,
円,四角,文字列,軸,葉の輪郭が各1個と,
根毛(円弧)5本の計10個が定義されていて,
図の中の色々な場所でそれぞれを,
適当なパラメータを使って,
インスタンスとして出現させることで,
図の全体を描いているという構造です.
なお,流用目的で,大苗,
小苗やmm単位でアクセスできるオブジェクト等も
作ってみました.
小サイズ用としてはこれで十分と判断し,
これ以上の作業はしませんでした.
ちなみに,
残された問題点としては,
小サイズ用途では問題とならないものの,
⑧葉の輪郭線,
側根の太さを位置により変化させる,
⑨線の交点を丸める,
等のことがあります.
逆にメリットとして,
ファイルサイズが極小になったことのほか,
機械的形状でかつ,
対称性高く作成されているので,
「手書き臭」が払拭できていることがあげられます.
また,
原図では,
白抜きの長方形がすべて同じ幅で,
円から大きく飛び出しているため,
他のオブジェクトと接近させたり,
重ねたりすると,
それらが白抜きされてしまいますが,
今回作成のものでは円のパス指定でクリップしているのでその様なことは発生しません.
原図は恐らくIllustratorで作成されたものと思われますが,
Illustratorでもちゃんとクリッピングマスク
(Photoshopのクリッピングパス)がかけられますので,
こういった,
不作法なふるまいをするファイルは,
外部に出すべきではないと思います.
といった次第で,一応ロゴが出来ました.
完成したので,見やすさは犠牲にして,
コメントや名刺と関係ないコードなどを外し,
ひとかたまりにまとめました.
これを以前の白黒名刺にくっつけて,
新しい名刺の完成となりました.あと,quick and dirty hackですが,
大昔の野茶研ロゴもあります.
背景
カラーのロゴを使った名刺が出来ましたが,
なんかいまいちなので,
背景にも色をつけてみることにしました.
単色で塗りつぶしてみましたが,
これもなんかしっくりきませんでした.
PostScript3にはシェーディング命令があるので,
単色塗りつぶしではなくて,
シェーディングの塗りつぶしにしてみました.
左右のグラディエントはあまりぱっとしなかったので,
対角線方向に変化させてみました.
同一色調の濃淡もなんか締まらなかったので,
薄い橙色から緑へのグラディエントにしてみました.
最低限のラインに達したと思えたので,
これで作業を終了としました.
感想など
OSXのprewiewは何とかならないのか?日本語フォントまわりがいつまでたっても直りません.
OSX上には色々なアプリがあって,
その多くは,
使用フォントの指定が出来るのに,
previewはOsakaしか使えないという状態がずっと続いています.
個人でインストールしたフォントは言うに及ばず,
システムフォントのヒラギノもすべてダメです.
というわけで,
デバッグ段階ではOsakaフォントを使って,
previewで見ていました.
本番は,
楷書フォントで,
Distillerでpdfにして,
pdfファイルを直接渡せるプリンタ(Xerox DocuCentre)に送り,
印刷しました.
実はこの件に関しては,
後日談と前日談?もあって,
上記のような進行となりましたが,
そのあたりを記します.
PostScriptファイルを見る場合,
労力的には,
previewもDistillerも本当は大して違わないのですが,
最初にDistillerを使った際に何度やってもハングしてしまい,
これは使っている古いDistillerがPostScript3対応ではないのではないかと考え,
previewに切り換えたわけです.
で,
この時に,
念のため,
同じファイルを使用中のOSXのpreview,
Ghostscriptで処理してみましたが,
ハングするようなことはありませんでした.
この様な次第で,
作業はpreviewを使ったと言うことです.
で,
最終結果のOsakaフォントを使ったカラー名刺が完成しました.
このあと,
ふと思い立ち,
各PostScript処理系のバージョンなどを調べてみようという気になって,
短いプログラムを書き,
処理系に喰わせたところ,
何れもPostScript3であることが解りました.
それではということで,
期待はしていなかったのですが,
完成版のPostScriptファイルのフォント指定をDF楷書に変更して,
Distillerに喰わせたところ,
今度はハングしないでちゃんとpdfが出来ました.
先回ハングした原因は不明ですが,
ともかく,
楷書フォントの版ができたので,
Osakaフォントのものは捨てて,
こちらを正式版として使うことになりました.
正面玄関
現行版:2010年4月1日
初 版:2010年4月1日
メールアドレス:nmizuno(アットマーク)affrc.go.jp