So-net無料ブログ作成
検索選択
前の10件 | -

風車のひまわりガーデン2017 [Photo]

2017年7月17日


昨日もふるさと広場へひまわりを撮影に来たのですが、いざ撮ろうとスイッチ入れたのですが、バッテリーを充電したままになってるのに気がつきました。幸い予備バッテリーがあったので良かったのですが、何枚か撮ってレンズを交換する時にモニターにno cardと表示されていました。
メモリーカードをパソコンに挿しっぱなしになっていることに気がつきました。
というわけで何も撮れずにすごすごと帰宅したのでした。
今日は用意万端で来ましたが、あいにくの曇り空。

himawari04.jpg

公式サイト:佐倉ふるさと広場・風車のひまわりガーデン

himawari01.jpg

himawari08.jpg

himawari03.jpg

himawari05.jpg

himawari02.jpg

himawari06.jpg

himawari07.jpg
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

はす祭り2017 [Photo]

2017年7月15日

今年2度目のあやめパークです。はす祭りが開催されています。
佐原駅からバスに乗ったのですが、貸切でした。
この分では、園は閑散としているのではと思ったら、その通りでした。

帰りの佐原駅でその訳が分かりました。
佐原の大祭夏祭りが開催されているから、みんなこっちにいるようです。

ハス20170715.jpg

公式サイト:水郷佐原あやめパーク

ハス祭り.jpg

紅映朱簾.jpg

紅映朱簾

重水華.jpg

重水華

精華.jpg

精華

西施微笑.jpg

西施微笑

ハスの種子.jpg

種がこぼれそう

西施微笑2.jpg

西施微笑

西福寺観世.jpg

西福寺観世

天上蓮.jpg

天上蓮

壺蓮.jpg

壺蓮

ハスにトンボ.jpg

赤とんぼ

水車.jpg
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

目次 [PostScript]

PostScript手書き講座です。簡単な図形から始めて徐々に複雑な図形を制作していきます。
最初から順を追って、読んで実践することをお勧めします。

ブログを始めてやっと100記事を超えました。いろいろ写真を撮りに出かけたこともあって、記事ストックがなくなってきました。
これからは不定期に発信していこうかと思います。フラクタルや3Dについて現在勉強中ですので、出来次第発信したいと思います。
PostScriptという印刷ではメジャーで、プログラムでは超マイナーな言語に少しでも関心を寄せていただいている方がいらっしゃりますので、細く長く続けていきたいと思います。
ブログは初めてなので色々と不手際や間違いがありますが、今後ともよろしくお願いします。

2017年7月14日:連休前なので射影変換を本日アップします。

title.png
〔 〕内はオペレータ


PostScriptを始めよう



直線を描く



円を描く



直線を描く PART2



三角形・多角形を描く



点を打つ



円を描く PART2



パターンを描いてみよう



曲線を描いてみよう



具象的な曲線を描いてみよう



家紋を描いてみよう



PostScript BASIC



変換



PostScriptギャラリー



参考





nice!(2)  コメント(0)  トラックバック(0) 
共通テーマ:アート

射影変換 [PostScript]

変換


射影変換03.png
図形をx軸またはy軸で回転させて斜めにし、遠近感のある図形にします。
参考書籍をもとに変換式をPostScriptコードにしました。

変換式は
L:視点までの距離
a:平面の傾き角度
y1=k*L*y/(L*cos(a)-y*sin(a))
x1=k*x*(L+y1*sin(a))/L

参考書籍:続パソコン・グラフィック・アート 竹村 伸一 著
参考書籍:数式によるパソコン・グラフィックスのテクニック 依田 谹 著

射影変換.png

射影変換00.png
【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:射影変換 /L 300 def % 視点までの距離 /a -30 def % 平面の傾き角度 2 setlinecap % 線の先端スクエア /r 50 def % 円の半径 /sw 0 def % 始点スイッチ /shaei { % 射影変換プロシージャ /y1 L y mul L a cos mul y a sin mul sub div def /x1 x L y1 a sin mul add mul L div def sw 0 eq { x1 y1 moveto /sw 1 def } % swが0なら始点へ移動 { x1 y1 lineto } ifelse % 始点と終点の間にパスを引く } def 0 setgray 0 0 240 240 rectstroke % 黒枠 120 120 translate % 座標の原点を中央に移動 newpath % 水平線 -70 10 70 { /y exch def -80 10 80 { /x exch def shaei % 射影変換プロシージャ呼び出し } for /sw 0 def % 始点スイッチのリセット } for % 垂直線 -80 10 80 { /x exch def -70 10 70 { /y exch def shaei } for /sw 0 def } for % 円 0 1 360 { /th exch def /x r th cos mul def /y r th sin mul def shaei } for stroke % 線を描画
y軸で回転させる場合はx1とy1を入れ替えるだけです。
x1=k*L*y/(L*cos(a)-y*sin(a)) y1=k*x*(L+y1*sin(a))/L 射影変換01.png

射影変換02.png
エピサイクロイドで描いた図形を射影変換。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 /L 100 def % 視点までの距離 /a -35 def % 平面の傾き角度 /r 50 def % 円の半径 2 setlinecap % 線の先端スクエア /sw 0 def % 始点スイッチ /shaei { % 射影変換プロシージャ /y1 L y mul L a cos mul y a sin mul sub div def /x1 x L y1 a sin mul add mul L div def sw 0 eq { x1 y1 moveto /sw 1 def } % swが1なら始点へ移動 { x1 y1 lineto } ifelse % 始点と終点の間にパスを引く } def % ======= エピサイクロイド ========= /ar 40 def % 定円の半径 /br 10 def % 転円の半径 /cr 3 def % パラメータ /rc 1 def % R色 /gc 0 def % G色 /bc .8 def % B色 /lw 3 def % 線幅 % ======= メイン ========= newpath 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 .5 dup scale newpath % パスの初期化 .8 .4 5 { /cr exch def 0 1 360 { /th exch def % 制御変数をth(角度)に入れる % エピサイクロイドの数式 /x ar br add th cos mul cr br mul ar br add th br div mul cos mul sub def /y1 ar br add th sin mul cr br mul ar br add th br div mul sin mul sub def shaei % 射影変換プロシージャ呼び出し } for closepath /sw 0 def % リセット rc gc bc setrgbcolor % カラー設定 lw setlinewidth % 線幅設定 stroke % 線を描画 /rc rc .08 sub def % 色変化 /bc bc .09 add def /gc gc .07 add def /lw lw .2 sub def % 線を変化 } for

タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

おうぎ形変換 [PostScript]

変換


おうぎ形変換03.png
図形をおうぎ形に変換します。
参考書籍をもとに変換式をPostScriptコードにしました。

変換式のパラメータは図をご参照ください。
d=a*(x1-x)/x1+b
x2=(r+y1)*cos(d)+x0
y2=(r+y1)*sin(d)+y0

参考書籍:数式によるパソコン・グラフィックスのテクニック 依田 谹 著

おうぎ形.png


おうぎ形変換2.png

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:おうぎ形変換 /a 90 def % おうぎ形の傾き角度 /b 0 def % おうぎ形の湾曲の角度 /r 300 def % おうぎ形の中心からおうぎ形下端までの距離 /x1 400 def % 比率 /x0 0 def /y0 -250 def % おうぎ形の中心 /r2 50 def % 円の半径 2 setlinecap % 線の先端をスクエアにする /sw 0 def % 始点スイッチ /ougi { % おうぎ形変換プロシージャ /d a x1 x sub mul x1 div b add def /x2 r y1 add d cos mul x0 add def /y2 r y1 add d sin mul y0 add def sw 0 eq { x2 y2 moveto /sw 1 def } % swが0なら始点へ移動 { x2 y2 lineto} ifelse % さもなくば始点と終点の間にパスを引く } def 0 setgray 0 0 240 240 rectstroke % 背景 120 70 translate % 座標を中央に移動 % 水平線 -70 10 70 { /y1 exch def -80 10 80 { /x exch def ougi % おうぎ形変換プロシージャ呼び出し } for /sw 0 def % 始点スイッチのリセット } for % 垂直線 -80 10 80 { /x exch def -70 10 70 { /y1 exch def ougi } for /sw 0 def } for % 円 0 1 360 { /th exch def /x r2 th cos mul def % 円の公式 /y1 r2 th sin mul def ougi } for stroke

おうぎ形変換02.png
エピサイクロイドで描いた図形をおうぎ形に変換。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:おうぎ形変換 /a 90 def % おうぎ形の傾き角度 /b 0 def % おうぎ形の湾曲の角度 /r 300 def % おうぎ形の中心からおうぎ形下端までの距離 /x1 200 def /x0 0 def /y0 -300 def % おうぎ形の中心 /sw 0 def % 始点スイッチ /ougi { % おうぎ形変換プロシージャ /d a x1 x sub mul x1 div b add def /x2 r y1 add d cos mul x0 add def /y2 r y1 add d sin mul y0 add def sw 0 eq { x2 y2 moveto /sw 1 def } % swが1なら始点へ移動 { x2 y2 lineto} ifelse % 始点と終点の間にパスを引く } def % ======= エピサイクロイド ========= /ar 40 def % 定円の半径 /br 10 def % 転円の半径 /cr 3 def % パラメータ /rc 1 def % R色 /gc 0 def % G色 /bc .8 def % B色 /lw 3 def % 線幅 % ======= メイン ========= newpath 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 .5 dup scale newpath % パスの初期化 .8 .4 5 { /cr exch def 0 1 360 { /th exch def % 制御変数をth(角度)に入れる % エピサイクロイドの数式 /x ar br add th cos mul cr br mul ar br add th br div mul cos mul sub def /y1 ar br add th sin mul cr br mul ar br add th br div mul sin mul sub def ougi % おうぎ形変換プロシージャ呼び出し } for closepath /sw 0 def % リセット rc gc bc setrgbcolor % カラー設定 lw setlinewidth % 線幅設定 stroke % 線を描画 /rc rc .08 sub def % 色変化 /bc bc .09 add def /gc gc .07 add def /lw lw .2 sub def % 線を変化 } for

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

円筒(円柱)形変換 [PostScript]

変換


円筒形変換00.png
図形を円筒形に変換します。
参考書籍をもとに変換式をPostScriptコードにしました。
元の変換式は
x=r*sin(th)
z=r*cos(th)
yの位置は変わりません。

円筒形変換だけでは見た目の変換が分かりづらいので、回転を加えています。
回転の変換式は
x軸の回転
x1=x
y1=y*cos(xa)-z*sin(xa)
z1=y*sin(xa)+z*cos(xa)
y軸の回転
x2=x1*cos(ya)+z1*sin(ya)
y2=y1
z2=-x1*sin(ya)+z1*cos(ya)
z軸の回転
x3=x2*cos(za)-y2*sin(za)
ya=x2*sin(za)+y2*cos(za)
z3=z2

参考書籍:続パソコン・グラフィック・アート 竹村 伸一 著



円筒形変換01.png
変換前の図形

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:円筒(円柱)形変換 /xa 20 def % x軸角度 /ya 20 def % y軸角度 /za 30 def % Z軸角度 /r 60 def % 円柱の半径 /sw 0 def % 始点スイッチ /r2 50 def % 円の半径 2 setlinecap % 線の先端スクエア % 各軸の回転プロシージャ /rotation { % x軸角度 /x1 x def /y1 y xa cos mul z xa sin mul sub def /z1 y xa sin mul z xa cos mul add def % y軸角度 /x2 x1 ya cos mul z1 ya sin mul add def /y2 y1 def /z2 x1 neg ya sin mul z1 ya cos mul add def % Z軸角度 /x3 x2 za cos mul y2 za sin mul sub def /y3 x2 za sin mul y2 za cos mul add def /z3 z2 def % 描画 sw 0 eq { x3 y3 moveto /sw 1 def }{ x3 y3 lineto } ifelse } def 0 setgray 0 0 240 240 rectstroke % 黒背景 120 120 translate % 座標の原点を中央に移動 newpath % 水平線 -70 10 70 { % 水平線の縦の間隔 /y exch def % 制御変数をyに入れる -80 1 80 { % 水平線の開始角度 弧の滑らかさ 終了角度 /th exch def % 制御変数をth(角度)に入れる /x r th sin mul def % 円柱変換 /z r th cos mul def % 円柱変換 rotation % 回転プロシージャ呼び出し } for /sw 0 def % 始点スイッチのリセット } for % 垂直線 -80 10 80 { % 垂直線の横の間隔 /th exch def % 制御変数をth(角度)に入れる -70 1 70 { % 垂直線の長さ /y exch def % 制御変数をyに入れる /x r th sin mul def /z r th cos mul def rotation } for /sw 0 def } for % 円 0 1 360 { /th exch def /x r2 th cos mul def % 円の公式 /y r2 th sin mul def % 円の公式 /x r x sin mul def /z r x cos mul def rotation } for stroke

円筒形変換02-2.png
エピサイクロイドで描いた図形を円筒形に変換します。


エピサイクロイド2.png
変換前

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:円柱変換 /xa 30 def % x軸角度 /ya 30 def % y軸角度 /za -30 def % Z軸角度 /re 80 def % 円柱の半径 2 setlinecap /sw 0 def % 始点スイッチ % 各軸の回転プロシージャ /rotation { % x軸角度 /x1 x def /y1 y xa cos mul z xa sin mul sub def /z1 y xa sin mul z xa cos mul add def % y軸角度 /x2 x1 ya cos mul z1 ya sin mul add def /y2 y1 def /z2 x1 neg ya sin mul z1 ya cos mul add def % Z軸角度 /x3 x2 za cos mul y2 za sin mul sub def /y3 x2 za sin mul y2 za cos mul add def /z3 z2 def % 描画 sw 0 eq { x3 y3 moveto /sw 1 def }{ x3 y3 lineto } ifelse } def 0 setgray 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 % ======= エピサイクロイド ========= /ar 40 def % 定円の半径 /br 10 def % 転円の半径 /cr 3 def % パラメータ /rc 1 def % R色 /gc 0 def % G色 /bc .8 def % B色 /lw 3 def % 線幅 % ======= メイン ========= newpath 1 dup scale newpath % パスの初期化 .8 .4 5 { /cr exch def % 制御変数crに入れる 0 1 360 { /th exch def % 制御変数をth(角度)に入れる % エピサイクロイドの数式 /x ar br add th cos mul cr br mul ar br add th br div mul cos mul sub def /y ar br add th sin mul cr br mul ar br add th br div mul sin mul sub def /x re x sin mul def % 円柱変換 /z re x cos mul def % 円柱変換 rotation % 回転プロシージャ呼び出し } for closepath /sw 0 def % リセット rc gc bc setrgbcolor % カラー設定 lw setlinewidth % 線幅設定 stroke % 線を描画 /rc rc .08 sub def % 色の変化 /bc bc .09 add def /gc gc .07 add def /lw lw .2 sub def % 線幅の変化 } for

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

栗山川のあじさい遊歩道 [Photo]

2017年6月24日

多古町のあじさい祭りはすでに終わっていますが、1万株あるという紫陽花を見て見たかったので、あじさい遊歩道へ行って来ました。
成田空港第2ターミナルビルからシャトルバスに乗り、25〜30分ほどで道の駅多古へ。
多古大橋からあじさい橋間の川沿いを往復しました。
紫陽花は葉っぱが汚いのと蜘蛛の巣があったりで、残念ですがあまりいい写真は撮れませんでした。

あじさい遊歩道

紫陽花08.jpg

左に見える建物が道の駅多古あじさい館です。こちらで昼食のおこわなどを買いました。

紫陽花07.jpg

紫陽花06.jpg

紫陽花05.jpg

紫陽花04.jpg

紫陽花03.jpg

紫陽花02.jpg

紫陽花01.jpg

紫陽花09.jpg
タグ:紫陽花
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

DSCとEPSについて [PostScript]

PS BASIC


eps.png
PostScriptはプログラムの全体的な構造を規定していません。
DSC(Document Structuring Conventions/文書構造規則)は文書交換を容易にするために推奨されています。
つまりアプリに読み込まれた時やプリント出力を望ましい結果にするための規則です。
必須のコメントを除いては、この講座では必要のないものもありますが、知識としてご紹介します。

こちらを参考にいたしました。
PostScript Technology Center
PostScript Language Document Structuring Conventions (DSC) Specification Version 3.0 #5001
Encapsulated PostScript (EPS) File Format Specification Version 3.0 #5002

PostScriptドキュメントの構造は大きく分けてプロローグ(Prolog)とスクリプト(Script)に分けられます。
プロローグにはヘッダーとプロシージャ定義等が含まれます。
ヘッダー部分はDSCコメントのみで構成されます。
スクリプトにはドキュメント設定、ページ設定、ドキュメントトレーラーからなります。トレーラーは後処理やクリーンアップを行います。

EPSはこのDSCに基づいたフォーマットです。


DSC.png

コメントには引数ありのものとなしのものがあります。
(引数なしの例)%%EndComments
引数ありのものはコメントのキーワードの最後にコロンがありスペース文字1個空けて引数が続きます。
(引数ありの例)%%BoundingBox: 0 0 240 240
コメントは1行255文字以内です。
EPSファイルとして必要なものは次のDSCヘッダコメントのみです。
その他のタイトルや作成日、著作者・著作権等は入れておいた方がいいかと思います。
プロシージャとメインプログラムを分けたい場合は%%BeginProlog %%EndPrologを使います。

必須のDSCヘッダコメント

%!PS - Adobe-3.0 EPSF-3.0
%%BoundingBox:llx lly urx ury

%!PS - Adobe-3.0は PostScript言語のページ記述がDSCバージョン3.0に完全に準拠していることを示します。
EPSF-3.0はEPSF形式のバージョン3.0に準拠していることを示します。
%%BoundingBox:llx lly urx uryは図形を囲む境界ボックスで左下(llx、lly)および右上(urx、ury)の座標を指定します。これは整数のポイントで指定します。

推奨のDSCヘッダコメント

%%Title: 文字列
%%Creator: 文字列
%%CreationDate: 文字列

%%Title:にはドキュメントのタイトルを入れます。
%%Creator:にはドキュメントの作成者やドキュメントを作成したアプリ名などを入れます。
%%CreationDate: にはドキュメントが作成された日付を入れます。フォーマットはありませんので好きなように入れてください。
(例)%%CreationDate: 2017/6/21 or 2017年12月12日 or 20171015 等

その他

%%Copyright: 文字列

%%Copyright:は著作権情報を入れます。

%%EndComments

ヘッダーコメントの終わりを示します。

%%BeginProlog
%%EndProlog

この間にプロシージャ等の定義を含めます。
プロシージャがない場合でも%%EndPrologコメントを含めておけばドキュメント全体がスクリプトになります。

%%BeginSetup
%%EndSetup

この間にグラフィック状態の設定などを入れます。

%%EOF はドキュメントの最後を示します。


【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(2278待チ合イ四ツ七宝) %%Creator: Toyokazu Nishi %%CreationDate: 2017/05/09 %%Copyright: 2017(c) Toyokazu Nishi %%EndComments %%BeginProlog /shippo { gsave 0 30 translate newpath 0 0 30 360 0 arcn clip newpath -30 30 30 0 360 arc 60 30 moveto 30 30 30 0 360 arc 0 -30 moveto -30 -30 30 0 360 arc 60 -30 moveto 30 -30 30 0 360 ar wh grestore } def 1.8 dup scale %%EndProlog /wh { 1 setgray fill } def 0 setgray 0 0 240 240 rectfill 120 120 translate 4 { shippo 90 rotate } repeat %%EOF

EPSフォーマットには制限があり、使ってはいけないオペレータがあります。showpage、copypage、clear、cleardictstack、initclip、quitなどです。EPSはもともと他のアプリにインポートするためのフォーマットなので、複数のEPSファイルにshowpageがあると、グラフィックス状態を初期化してしまうので不具合が起こる可能性があります。

タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

グローバル変数とローカル変数について [PostScript]

PS BASIC


epitrocoid_00029.png
PostScriptではローカル変数という明確なものはありませんが、辞書機能を利用して変数の有効範囲をシミュレートすることは可能です。
辞書とはキーと値をペアにしたデータの入れ物です。
PostScriptでは
●ユーザー辞書は読み書き可能なローカル辞書で辞書スタックの一番上にあり、カレント辞書となります。
●グローバル辞書は書き込み可能なグローバルな辞書
●システム辞書は読み取り専用のグローバルな辞書でオペレータ名とその値(動作)や定数が格納されています。
この講座ではほとんどグローバル変数しか使用していません。それは短いプログラムなので、ローカル変数を使う必要性を感じていなかったからです。
正しく動作するプログラムを組む時には変数の管理が必要ですので、ローカル変数の指定方法をご紹介します。

(1)辞書に入れる要素数を指定して辞書を作成します。
   例(/xxx 1 dict def)or( 3 dict )
(2)辞書を辞書スタックにプッシュします。(begin)
(3)要素を要素数分、定義します。例(/yy 100 def)
(4)辞書をポップします。(end)
以上で辞書をローカル変数として使用することができます。
要素数は指定した値より多くなっても問題ありません。
言語レベル2以上では要素数を初期値と解釈して動的に拡張してくれます。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:グローバル変数とローカル変数 %上記イメージとコードは関係ありません。 /test01 0 def % test01に0を入れる(グローバル変数) /testdict 1 dict def % 要素数1のtestdictという名前の辞書を作成 testdict begin % testdictを辞書スタックにプッシュ /test01 100 def % test01に100を入れる(ローカル変数) test01 == % test01を標準出力 結果:100 end %カレント辞書(testdict)をポップする test01 == % test01を標準出力 結果:0 Distillefで開くとジョブログ画面に標準出力の結果が表示されます。 distiller.png またはMacのプレビュー.appで開くとエラーとなりますが、コンソールで標準出力の結果を 見ることができます。 consol.png プロシージャ内で名前のない辞書を作成。 呼び出される毎にメモリを消費するが、変数が毎回初期化されるということと、 名前がないので隠蔽できるメリットがある。 %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:グローバル変数とローカル変数 /test01 0 def % test01に0を入れる(グローバル変数) /test02 2 def % test02に2を入れる(グローバル変数) /testproc { 2 dict begin % 要素数2の辞書を辞書スタックにプッシュ /test01 100 def % test01に100を入れる(ローカル変数) /test02 50 def % test02に50を入れる(ローカル変数) test01 == % test01を標準出力 test02 == % test02を標準出力 end %カレント辞書(testdict)をポップする } def test01 == % test01を標準出力 結果:0 /test01 test02 3 add def % test02に3を足したものをtest01に入れる test01 == % test01を標準出力 結果:5 test02 == % test01を標準出力 結果:2 testproc % 標準出力 結果:100 50

【オペレータの説明】
/キー 値 def
キーと値のペアを辞書に登録します。これは他のプログラムの変数のように使用できます。 /キー { 処理 } def のようにすればプロシージャとなります。プロシージャとは複数の処理をまとめたものです。
整数 dict
整数個(0以上)の要素を持つ空の辞書を作成してオペランドスタックに返す。
(例)/testdict 2 dict def
名前のない辞書を作成することも可能
(例)1 dict begin
辞書 begin
辞書を辞書スタックにプッシュし、カレント辞書に設定する。
(例)testdict begin
end
カレント辞書を辞書スタックからポップし、その下の辞書をカレント辞書に設定する。
/キー load
辞書スタックでキーを検索し、対応する値を返す。
辞書 /キー get
キーに対応する辞書の値を返す。

タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート

Fontについて [PostScript]

Fontについて


Font永00.png
PostScriptではフォントはフォント辞書のことです。 フォントのグリフ(字形)を使って文字を描画します。 フォントと書体が混同されてしまっていますのでここで簡単な定義をしておきます。
・字体(type):文字の骨組み
・字形(gryph):図形として表現したもの
・書体(type face):一貫したデザインで形成された字形の集合体
・フォント(font):同じサイズで、書体デザインの同じ活字の一揃い
・文字:抽象的なシンボル
・テキスト:文章等のひとまとまり 文字列

何故こんな間違いが普及したのかというと、恐らくパソコンのFontsフォルダに収められていたからフォントと呼ぶようになったのかと思います。

モリサワ フォント用語集 字体・字形・書体

【サンプルコード】
Font01.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:書体の指定の仕方 0 setgray 0 0 240 240 rectstroke % 黒背景 120 120 translate % 座標の原点を中央に移動 /Helvetica findfont % 使用するフォントの選択 32 scalefont setfont % フォントを32倍に拡大し、カレントフォントに設定する 0 0 moveto % 描画する位置(0,0)を指定 (Sample) show % 文字列Sampleを描画する
文字列をセンター合わせにします。 Font02-1.png % 背景、座標設定等は略しています /Helvetica findfont % 使用するフォントの選択 32 scalefont setfont % フォントを32倍に拡大し、カレントフォントに設定する (Sample) stringwidth % テキストの横幅を求め、移動する距離を返す。 Wx Wy % スタック内のWyとWxを入れ替えて距離Wxを-2で割ってマイナス側に始点を移動 exch -2 div 0 moveto (Sample) show % 文字列Sampleを描画する
改行します。 Font02-2.png /center_show { % センター合わせのプロシージャ % 文字列を複製し(dup)文字列の幅を得て(stringwidth)、辞書を削除し(pop) % -2で割る( -2 div)→x方向の移動量 y座標の移動量(0) 移動し(rmoveto)文字列を描画(show) dup stringwidth pop -2 div 0 rmoveto show } def % 改行プロシージャ 0(x座標) 現在の座標を得る(currentpoint)→20.0 0.0を入れ替え(exch)→ % 0.0 20.0、0.0を削除(pop)→20.0(y座標) 38を引く(38 sub) 始点の移動(moveto) /newline { 0 currentpoint exch pop 38 sub moveto } def % 背景、座標設定等は略しています 0 20 moveto /Helvetica 32 selectfont (Sample) center_show newline % 文字列Sampleを描画し改行する (PostScript) center_show
文字間の空きを設定します。 Font02-3.png /text (Sample) def % 文字列の定義 /aki 20 def % 文字間の空きの定義 /center_show { % センター合わせのプロシージャ text stringwidth pop -2 div 0 rmoveto ashow % 空きを入れた分センター合わせが狂ってくるのでその補正プロシージャ /aki_hosei { text length 1 sub aki mul -2 div } def % 背景、座標設定等は略しています aki_hosei 0 moveto%始点を移動 /Helvetica 32 selectfont aki 0 text center_show % 文字列Sampleを 文字間を開けて描画する
文字列を右合わせにします。 Font03-3.png /right_show { % 左合わせのプロシージャ dup stringwidth pop neg 0 rmoveto show } def /newline { 50 currentpoint exch pop 38 sub moveto } def % 背景、座標設定等は略しています 50 0 moveto /Helvetica 32 selectfont (Sample) right_show newline (PostScript) right_show
日本語を表示します。MacのOsakaは特別な設定は必要ありません。 ファイルはShift_JISで保存します。他のフォントは文字化けします。 Font04.png /center_show { dup stringwidth pop -2 div 0 rmoveto show } def % 背景、座標設定等は略しています 0 0 moveto /Osaka 32 selectfont (サンプル) center_show
ヒラギノ角ゴ Std W6を指定します。プレビュー.appやIllustrator、PhotoShopではエラーで 変換できませんが、Distillerでは変換できました。 CIDフォントに関してはこちらのサイトを参考にいたしました。 Tips on PostScript hiragino.png /center_show { dup stringwidth pop -2 div 0 rmoveto show } def % CIDフォントの設定 /HiraKakuStd-W6-RKSJ-H /RKSJ-H [/HiraKakuStd-W6] composefont /HiraKakuStd-W6-RKSJ-H 48 selectfont % 背景、座標設定等は略しています 0 0 moveto (サンプル) center_show
ヒラギノ明朝 Std W6を指定し縦書きで表示します。RKSJ-HのHをVに変えます。 hiraginoV.png /HiraMinStd-W6-RKSJ-V /RKSJ-V [/HiraMinStd-W6] composefont pop /HiraMinStd-W6-RKSJ-V 32 selectfont % 背景、座標設定等は略しています 0 64 moveto (サンプル) show

【オペレータの説明】

キー findfont
キー名のフォント辞書を得て、オペランドスタックにpushする。
(例)/Times-Roman findfont
フォント 拡大・縮小率 scalefont
フォントを拡大・縮小する。フォントの標準サイズは高さが1 単位。
(例)/Times-Roman 12 scalefont
フォント setfont
フォントをカレントフォントに設定する。
(例)/Times-Roman setfont
(文字列) show
カレントフォントで文字列を描画する。
(例)(Sample) show
Ax Ay (文字列) ashow
描画するグリフの幅を一括して調整する。
(例)10 0(Sample) ashow
キー CMap ファイル CIDFont composefont
CMapファイル、CIDFontを参照し、CIDフォント辞書を作成。definefontを実行しフォント辞書にキーの名前を付けてFont リソースカテゴリに登録する。
※CIDフォントとは日本語や中国語、朝鮮語のような膨大な文字セットを持つ言語を扱うためのフォーマット。
CIDフォント
キー 拡大率 selectfont
キー名のフォント辞書を得て拡大・縮小し、カレントフォントに設定する。
従来の指定の仕方より短くてすむ。
/Helvetica findfont 12 scalefont setfont

/Helvetica 12 selectfont

文字列 stringwidth
文字列のグリフ幅の合計値を求め、カレントポイントの移動距離(Wx、Wy)を返す
(例)
/HiraMinStd-W6-RKSJ-H /RKSJ-H [/HiraMinStd-W6] composefont
/HiraMinStd-W6-RKSJ-H 12 selectfont
(サンプル) stringwidth pstack
結果:0.0 72.0044 -dict-

結果から分かるようにスタックの先頭に辞書があるので、stringwidthを使う場合は辞書をpopすること。
currentpoint
カレントポイントの座標値(x、y)を返す。
pstack
オペランドスタック上のオブジェクトを標準出力(Distiller等のジョブログ画面)に表示する。 スタックの内容は変更しないのでバグ取りに利用する。
==
オペランドスタック上のオブジェクトをpopしテキストに変換して標準出力に表示する。 主にバグ取りに使用する (例)x ==
文字列 length
文字列の文字数を返す。
lengthはポリモーフィックなオペレータの一つで、型が異なるオペレータ、例えば配列、辞書などにも型に応じて適用されます。配列の場合は配列の要素数を返します。
ポリモーフィックなオペレータは他にはget、put、copyなどがあります。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:アート
前の10件 | -