So-net無料ブログ作成
検索選択

待チ合イ四ツ七宝を描いてみよう [PostScript]

家紋を描く


家紋待合.png
待チ合イ四ツ七宝という家紋を描きます。
円を2列2行並べて、真ん中を同サイズの円でクリップします。(下図)
それを4回転させれば出来上がり。一部重なっているけど問題ないでしょう。

参考:日本の家紋/発行2004年5月1日 初版発行/発行者 安田英樹/発行所 株式会社青幻舎

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(待チ合イ四ツ七宝) /wh { 1 setgray fill } def % 白で塗りつぶし 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 /shippo { % 七宝プロシージャ定義 gsave % グラフィクス状態の保存 0 30 translate % y軸正方向に30ポイント移動 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 arc % 右下の円 wh % 白で塗りつぶし grestore % グラフィクス状態の復元 } def 1.8 dup scale % 1.8倍拡大 4 { % 4回繰り返し shippo % 七宝プロシージャの呼び出し 90 rotate % 90度回転 } repeat

家紋待合説明.png

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

輪違イを描いてみよう [PostScript]

家紋を描く


家紋10輪違イ.png
輪違イという輪を2つ鎖状に繋げた家紋です。
当初、上半分の半円の輪を定義して、それを鏡像にして下半分をくっつけようとしました。
ところが複合パスの出ない筈の線が出てしまいました。
プレビューではつなぎ目の線は出ないのですが、Adobe Illustratorで開くと薄っすらと見えてしまいます。(下図)
そこでドーナツ状の輪を作り、四角形で上半分をクリップすることにしました。

参考:日本の家紋/発行2004年5月1日 初版発行/発行者 安田英樹/発行所 株式会社青幻舎

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(輪違イ) 2 setlinewidth % 線幅2ポイント /wa { % 輪の定義(上半分) 69 0 -138 69 rectclip % 四角形で上半分をクリップ 0 0 69 0 360 arc % 外側の円 51 0 moveto % 始点を移動 0 0 51 360 0 arcn % 内側の円(時計回り) gsave 1 setgray fill % 白で塗りつぶし grestore 0 setgray stroke % 黒線 } def /wa2 { % 輪を2個定義 gsave -30 0 translate wa % -30ポイントwaを移動 grestore 30 0 translate wa % 30ポイントwaを移動 } def 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 gsave % グラフィックス状態の保存 wa2 % 2個の輪を呼び出し grestore % グラフィックス状態の復帰 -1 -1 scale % 座標を反転する wa2 % 下半分の2個の輪

真ん中横に薄っすらと線が見えます。
家紋10輪違イ-2.png

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

平稲妻を描いてみよう [PostScript]

家紋を描く


家紋11平稲妻.png
平稲妻という家紋で、稲妻をこんな形にデザインするとは驚きです。
真ん中の短い横線を1単位とすると直線の長さが規則的になっています。(下図)1、1、2、2、3、3....
この1単位に任意の大きさ(w)を掛けて適度な大きさにします。

参考:日本の家紋/発行2004年5月1日 初版発行/発行者 安田英樹/発行所 株式会社青幻舎

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(平稲妻) /w 30 def % 全体の大きさを制御 /r { % 相対的長さで線を引くプロシージャ % ★から渡される値は順番が逆になることに注意 /dy exch w mul def % y軸方向の長さをw倍する /dx exch w mul def % x軸方向の長さをw倍する dx dy rlineto % 相対的長さで線を引く } def 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 1 setgray % 白色 % バックの四角形 -3 w mul -3 w mul w 6 mul w 6 mul rectfill 0 0 moveto % (0,0)に始点を置く -1 0 r % ★ 線を引く(-1はdxに、0はdyに引き渡される) 0 1 r 2 0 r 0 -2 r -3 0 r 0 3 r 4 0 r 0 -4 r -5 0 r 0 setgray % 黒色 2 setlinewidth % 線幅2ポイント stroke % 線の描画

家紋11平稲妻説明.png
同じ家紋を今度は配列を使って描いています。
考え方は上のプログラムと同じで、直線の長さを配列に入れているだけです。
図形は上と同じなので省略します。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(三ツ稲妻菱) % 配列を使用する /inazuma [ [-1 0] [0 1] [2 0] [0 -2] [-3 0] [0 3] [4 0] [0 -4] [-5 0] ] def /w 30 def % 全体の大きさを制御 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 /cmtx matrix currentmatrix def % カレント座標を保存する newpath % パスの初期化 1 setgray % 白色 % バックの四角形 -3 w mul -3 w mul w 6 mul w 6 mul rectfill 0 0 moveto % (0,0)に始点を置く w dup scale % 座標を30倍に拡大 0 1 8 { /index exch def % 制御変数をindexに入れる % 配列(inazuma)から順に(index)座標を取り出し(get)、スタックに置き(aload)、 % オペランドは削除(pop)して直線を引く(rlineto) inazuma index get aload pop rlineto } for cmtx setmatrix % 座標を拡大前の座標に復元 0 setgray % 黒色 2 setlinewidth % 線幅2ポイント stroke % 線の描画

家紋11三ツ稲妻菱.png
平稲妻を三つ組み合わせて「三ツ稲妻菱」を描きます。平稲妻を座標変換して菱形にします。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:家紋を描く(三ツ稲妻菱) /w 15 def % 全体の大きさを制御 /r { % 相対的長さで線を引くプロシージャ % ★から渡される値は順番が逆になることに注意 /dy exch w mul def % y軸方向の長さをw倍する /dx exch w mul def % x軸方向の長さをw倍する dx dy rlineto % 相対的長さで線を引く } def /inazuma { newpath % パスの初期化 1 setgray % 白色 % バックの四角形 -3 w mul -3 w mul w 6 mul w 6 mul rectfill 0 0 moveto % (0,0)に始点を置く -1 0 r % ★ 線を引く(-1はdxに、0はdyに引き渡される) 0 1 r 2 0 r 0 -2 r -3 0 r 0 3 r 4 0 r 0 -4 r -5 0 r 0 setgray % 黒色 2 setlinewidth % 線幅2ポイント stroke % 線の描画 } def % 図形を菱形にするための座標変換の数値 /sx { 30 cos } def /sy { 30 sin } def /sx2 { -30 cos } def /sy2 { -30 sin } def 0 0 240 240 rectfill % 黒背景 120 120 translate % 座標の原点を中央に移動 % 菱形を描く gsave % グラフィックス状態の保存 [ 270 cos 270 sin sx sy 41 -20 ] concat % 座標変換 inazuma % 右側面 grestore % グラフィックス状態の復帰 gsave [ sx neg sy2 neg 0 -1 -41 -20 ] concat inazuma % 左側面 grestore gsave [ sx sy sx neg sy2 neg 0 50 ] concat inazuma % 天面


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

オーバープリントについて [PostScript]

PS BASIC


オーバープリントとは例えば赤いセロファンと青いセロファンを重ねると、重なった部分が紫色になるという透明効果のことです。
デザイン・印刷業界ではノセと言います。

オーバープリントヌキ.png
同じように赤い色紙と青い色紙を重ねても、重なった部分は上になる色です。不透明なので当然ですね。これはヌキアワセ(ケヌキアワセ)と言います。

PostScriptは透明機能がありません。そこでせめてオーバープリントで混色できないかと試行しました。

Postscriptでもオーバープリント設定がありますが、混色された状態で見ることができません。またOSXのプレビューでも対応していません。
DistillerでPDF化すると表示は混色されていますが、画像として書きだしても混色されていませんでした。オーバープリントは印刷時に適用されるものなので仕方がないのです。
何とかオーバープリントの画像ができないかと試したのがIllustratorで書き出す方法です。

オーバープリントした画像を作成する手順

(1)PostScriptプログラムでsetoverprintをtrueにしてepsファイル作成。
(2)epsファイルをAdobe Illustratorで開き、各種ファイルフォーマットで書き出す

以上

何とかフリーウエア等で、できないかと思ったのですが。。。


(注意)

※CMYKモードでなければオーバープリントはできません。
※CMYKモードのため色がくすんでしまいます。
※重ね順や同色どうしの混色などではオーバープリント効果がでないことがあります。

【サンプルコード】
オーバープリント.png
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:オーバープリント /DeviceCMYK setcolorspace % CMYK色空間にする /en { 0 360 arc fill } def % 円のプロシージャ /cy { 1 0 0 0 setcmykcolor } def % Cyan /ma { 0 1 0 0 setcmykcolor } def % Magenta /ye { 0 0 1 0 setcmykcolor } def % Yellow /i 0 def % 色変更スイッチ 0 0 240 240 rectstroke % 黒枠で囲む 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 true setoverprint % オーバープリント設定 3 { % 3回繰り返す i 0 eq { cy } { % iが0ならCyan i 1 eq { ma } % iが1ならMagenta { ye } ifelse } ifelse % それ以外ならYellow 0 40 70 en % (0,40)に半径70の円を描く 120 rotate % 120度回転 /i i 1 add def % i=i+1 } repeat


【サンプルコード】
オーバープリント2.png
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%HiResBoundingBox: 0 0 240 240 %%Title:ランダムな円形を描く % 所々にオーバープリント効果が出ています。 /x { rand 101 mod 50 sub 3 mul } def % x座標(-150〜150 3刻み) /y {rand 101 mod 50 sub 3 mul } def % y座標(-150〜150 3刻み) /r 20 def % 半径 /DeviceCMYK setcolorspace % CMYK色空間にする /randam_color { % ランダムカラー設定 /cy rand 5 mod 0.1 mul def % Cyan色(0.0~0.4 0.1刻み) /ma rand 5 mod 0.1 mul def % Magenta色(0.0~0.4 0.1刻み) /ye .5 def % Yellow 0.5 cy ma ye 0 setcolor カラー設定 } def 120 120 translate % 座標の原点を中央に移動 % 黒四角(円がはみ出すのでclipしている) 120 120 moveto -240 0 rlineto 0 -240 rlineto 240 0 rlineto closepath clip stroke true setoverprint % オーバープリント設定 newpath % パスの初期化 50 { % 50回、{ }内を繰り返す randam_color % ランダムカラー設定 x y r 0 360 arc fill % 円を描く } repeat



【オペレータの説明】
色空間ファミリ名 setcolorspace
色空間を設定し、初期化する。
色空間ファミリ名:DeviceGray、DeviceRGB、DeviceCMYK

(例)
/DeviceRGB setcolorspace
色値1〜色値n setcolor
色値を設定する。
setcolorは上記のsetcolorspaceと共に使用する。
色値の個数はカラースペース(色空間)によって異なる。RGBなら色値はred、green、blueの3個、CMYKならCyan、Magenta、Yellow、Key Plateの4個になる。
※ setrgbcolorやsethsbcolor、setcmykcolorは色空間と色値を同時に設定する
(例)
/DeviceRGB setcolorspace
1 0 0 setcolor

論理値 setoverprint
trueでオーバープリントを設定する。
何も記述しない場合はfalse。

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

タイリングパターンについて [PostScript]

PS BASIC


パターンテスト1.png
タイリングパターンとは図形を隙間なく平面に敷き詰めたものです。
タイリングパターンはPostScriptレベル2からの機能で、色付きと色なしがあります。
色付きとは基本となる図形に色を付けてパターン登録する方法で、色なしとは色を付けないでパターンを登録し、パターンを敷き詰める時に色を付ける方法です。
パターン作成と適用は以下の手順です。
(1)パターンの定義
(2)パターンのインスタンス化(実体化)
(3)色空間の選択
(4)パターン呼び出し

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:タイリングパターンパターン(色付き) 0 0 240 240 rectstroke 120 120 translate << /PatternType 1 % 1:タイリングパターン/2:シェーディングパターン /PaintType 1 % 1:色つき/2:色なし /TilingType 1 % 1:一定間隔/2:歪みなし/3:一定間隔の高速タイリング %(必須)パターンセルのバウンディングボックスの左下隅と右上隅を指定する /BBox [-20 -20 20 20 ] /XStep 50 % パターンセルを水平方向に配置する間隔をパターン座標系で指定 /YStep 50 % パターンセルを垂直方向に配置する間隔をパターン座標系で指定 % 1.パターンを定義 /maru { 1 0 .5 setrgbcolor % ピンクの円 0 0 20 0 360 arc fill 45 rotate %黄色のダイヤ型 1 .8 0 setrgbcolor -5 -5 10 10 rectfill } def /PaintProc { % パターンセルを描画する手続き % 辞書をポップする以外、スタックの変更不可 begin % 辞書スタックにパターンをプッシュする maru end } bind >> % パターン辞書のプロトタイプの終了 %2. パターンのインスタンス化 matrix % パターン座標 makepattern % パターンのインスタンスの生成 /maruP exch def % インスタンスをmaruPにいれる %3. 色空間の選択 /Pattern setcolorspace %4. パターン呼び出し maruP setcolor -100 -100 200 200 rectfill % 矩形にパターンを描画する
BBoxとXStep/YStepの関係図です。
パターンテスト説明.png
BBoxやXStep、YStepを変えるとパターンも変わります。 /BBox [-20 -20 0 0 ] /XStep 20 /YStep 20
パターンテスト2.png

パターンテスト3.png
次はパターン登録時に色は付けないで、パターンを敷き詰める時に色を付ける方法です。

【サンプルコード】
%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title: タイリングパターンパターン(色なし) 0 0 240 240 rectstroke 120 120 translate << /PatternType 1 % 1:タイリングパターン/2:シェーディングパターン /PaintType 2 % 1:色つき/2:色なし /TilingType 1 % 1:一定間隔/2:歪みなし/3:一定間隔の高速タイリング %(必須)パターンセルのバウンディングボックスの左下隅と右上隅を指定する /BBox [-20 -20 20 20 ] /XStep 50 % パターンセルを水平方向に配置する間隔をパターン座標系で指定 /YStep 50 % パターンセルを垂直方向に配置する間隔をパターン座標系で指定 /PaintProc { % パターンセルを描画する手続き pop % パターン辞書をポップする % 1.パターンを定義 0 0 20 0 360 arc fill % 円(塗りつぶしのみ、色はつけていない) } bind >> % パターン辞書のプロトタイプの終了 %2. パターンのインスタンス化 matrix % パターン座標 makepattern % パターンのインスタンスの生成 /maruP exch def % インスタンスをmaruPにいれる %3. 色空間の選択 [/Pattern /DeviceRGB] setcolorspace %4. パターン呼び出し(先頭で色設定) .9 .4 .8 maruP setcolor -100 -100 100 100 rectfill .6 .5 .85 maruP setcolor 0 -100 100 100 rectfill .75 .7 0 maruP setcolor -100 0 100 100 rectfill .3 .7 .8 maruP setcolor 0 0 100 100 rectfill 1 0.7 0 maruP setcolor 0 0 70 0 360 arc fill

【オペレータの説明】
<<
辞書の構築を開始
>>
辞書の構築を終了
辞書 begin
辞書を辞書スタックにプッシュする
end
カレント辞書を辞書スタックからポップする
プロシージャ bind
プロシージャに記述されている名前をオペレータに一括して置換する

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

シェーディングパターン(線形)について [PostScript]

PS BASIC


グラデーションについて紹介します。
海外のサイトではグラデーションの見本をみかけますが、日本ではあまり解説したサイトはないようです。まあ、グラデーションはグラッフィックスアプリで簡単にできるので、あえてPostScriptで作る必要はないかもしれません。

グラデーションはシェーディングパターンで描画する処理です。言語レベル3からの機能です。

シェーディングパターンは次の7種類あります。
1:関数シェーディング
2:線形シェーディング
3:放射シェーディング
4:自由形式のグローシェーディングによる三角メッシュ
5:ラティス形式のグローシェーディングによる三角メッシュ
6:クーンズパッチメッシュ
7:テンソル積パッチメッシュ

ここでは2〜5までのシェーディングについてサンプルで説明します。
線形シェーディングは1方向のグラデーションです。
開始色と終了色とその座標や、割合(バランス)などを設定できます。
★が付いたパラメータは変更可能です。色々と変えてみてください。

(注意)
/ColorSpace色空間により開始・終了色の/C0 /C1 の値の個数が変わります。
/DeviceRGB 3個 /DeviceGray 1個 /DeviceCMYK 4個
/Domain を大きい数値にするとFinderのプレビューではバンド幅が粗く見えますが、Illustratorやプレビュー.appで開くと粗くならず効果がありません。
rectstrokeを使うと/BBoxが効きません。

【サンプルコード】
ex01.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:線形グラデーション 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 % ===== グラデーションで塗りつぶされる図形を描く ====== newpath -100 100 moveto 0 -200 rlineto 200 0 rlineto 0 200 rlineto closepath gsave % グラッフィクス状態を保存 clip % クリップする << % シェーディングの辞書定義 /ShadingType 2 % 線形シェーディング /ColorSpace /DeviceRGB % ★色空間定義 /DeviceGray /DeviceCMYK /Background [ 1 1 1 ] % ★(オプション)背景色 /Coords [ 0 -100 0 100 ] % ★軸の開始点と終了点の座標を指定 [ x0 y0 x1 y1 ] %(オプション)シェーディング領域の指定 [x0 y0 x1 y1 ] %/BBox [-100 -100 100 100 ] % ★(オプション)開始・終了点から色を延長する falseがデフォルト /Extend [ false false ] /Function << % 関数辞書の定義 /FunctionType 2 % 指数補間法 %(オプション)バンド幅/1:デフォルト [ 0 5 ] バンド幅が粗くなる /Domain [ 0 1 ] /C0 [ 1 0 1 ] % ★開始色 マゼンタ /C1 [ 0 1 1 ] % ★終了色 シアン /N 1 % ★グラデーションのバランス 1(デフォルト):標準 0~100 >> >> shfill % グラデーションで塗りつぶす grestore % グラッフィクス状態を戻す
グレースケールの場合下記の3行を変更します。 /ColorSpace /DeviceGray % 色空間定義 /C0 [ 1 ] % 開始色 白 /C1 [ 0 ] % 終了色 黒 ex01g.png
CMYKの場合下記の3行を変更します。 /ColorSpace /DeviceCMYK /C0 [ 0 1 0 0 ] % 開始色 マゼンタ /C1 [ 1 0 0 0 ] % 終了色 シアン ex01c.png
グラデーションの方向と色を変えます。 /Coords [ -100 0 100 0 ] % 軸の開始点と終了点の座標を指定 [x0 y0 x1 y1 ] /C0 [ 1 1 0 ] % 開始色 イエロー /C1 [ 1 0 1 ] % 終了色 マゼンタ ex02.png
斜め方向のグラデーション /Coords [ -100 -100 100 100 ] /C0 [ 1 0 0 ] % 開始色 レッド /C1 [ 1 1 0 ] % 終了色 イエロー ex03.png
/Coords [ -100 0 50 0 ] % 終了点を短くしています。 (目盛りは参考のため付けています。) ex04.png
/Coords [ -100 0 50 0 ] /Extend [ false true ] % 終了点から色を延長しています。 ex05.png
/N 2 % 開始色のバランス大きくしています。 (0および負数は指定できません) ex06.png
/N .5 % 終了色のバランス大きくしています。 ex07.png
2つのグラデーションを配置した3色のグラデーションです。 ex08.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:線形グラデーション 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 % ===== グラデーションで塗りつぶされる図形を描く ====== newpath -100 100 moveto 0 -200 rlineto 200 0 rlineto 0 200 rlineto closepath gsave % グラッフィクス状態を保存 clip % クリップする << % シェーディングの辞書定義 /ShadingType 2 % 線形シェーディング /ColorSpace /DeviceRGB % 色空間定義 /Background [ 1 1 1 ] % (オプション)背景色 /Coords [ 0 0 0 100 ] % 軸の開始点と終了点の座標を指定 [ x0 y0 x1 y1 ] % (オプション)開始・終了点から色を延長する falseがデフォルト /Extend [ false false ] /Function << % 関数辞書の定義 /FunctionType 2 % 指数補間法 /Domain [ 0 1 ] %(オプション)バンド幅/1:デフォルト /C0 [ 1 0 1 ] % 開始色 マゼンタ /C1 [ 0 1 1 ] % 終了色 シアン /N 1 % グラデーションのバランス % 1(デフォルト):標準 0~100/10:61% 20:84.7% >> >> shfill % グラデーションで塗りつぶす << /ShadingType 2 /ColorSpace /DeviceRGB /Coords [ 0 -100 0 0 ] /Extend [ false false ] /Function << /FunctionType 2 /Domain [ 0 1 ] /C0 [ 1 1 0 ] % 開始色 イエロー /C1 [ 1 0 1 ] % 終了色 マゼンタ /N 1 >> >> shfill grestore % グラッフィクス状態を戻す
上の3色グラデーションを調整してテキストに適用。 ex09.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:線形グラデーション 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 % ===== グラデーションで塗りつぶされる図形を描く ====== newpath -100 -12 moveto % 座標の移動 /Helvetica-Bold findfont % Helvetica-Boldのfont辞書を取得 48 scalefont setfont % 48倍に拡大しカレントフォントに設定 (SAMPLE) true charpath clip % 文字をアウトラインにしクリップする << % シェーディングの辞書定義 /ShadingType 2 % 線形シェーディング /ColorSpace /DeviceRGB % 色空間定義 /Background [ 1 1 1 ] % (オプション)背景色 /Coords [ 0 0 0 24 ] % 軸の開始点と終了点の座標を指定 [ x0 y0 x1 y1 ] /Extend [ false false ] % (オプション)開始・終了点から色を延長する /Function << % 関数辞書の定義 /FunctionType 2 % 指数補間法 /Domain [ 0 1 ] %(オプション)バンド幅/1:デフォルト /C0 [ 1 0 1 ] % 開始色 マゼンタ /C1 [ 0 1 1 ] % 終了色 シアン /N 1 % グラデーションのバランス >> >> shfill % グラデーションで塗りつぶす << /ShadingType 2 /ColorSpace /DeviceRGB /Coords [ 0 -12 0 0 ] /Extend [ false false ] /Function << /FunctionType 2 /Domain [ 0 1 ] /C0 [ 1 1 0 ] % 開始色 イエロー /C1 [ 1 0 1 ] % 終了色 マゼンタ /N 1 >> >> shfill


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

シェーディングパターン(放射)について [PostScript]

PS BASIC


放射シェーディングについて紹介します。円から円へのグラデーションです。
開始円・終了円の半径と座標を設定します。半径は0以上で、どちらか1つを0にすると点になります。
その他のパラメータは線形シェーディングと同じです。
★が付いたパラメータは変更可能です。色々と変えてみてください。
(注)
/ColorSpace色空間により開始・終了色の/C0 /C1 の値の個数が変わります。
/DeviceRGB 3個 /DeviceGray 1個 /DeviceCMYK 4個
/Domain を大きい数値にするとFinderのプレビューではバンド幅が粗く見えますが、Illustratorやプレビュー.appで開くと粗くならず効果がありません。

【サンプルコード】
ex10.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:カラーグラデーション放射状 0 0 240 240 rectstroke 120 120 translate % 座標の原点を中央に移動 newpath << % シェーディング辞書の定義 /ShadingType 3 % 放射状シェーディング /ColorSpace /DeviceRGB /Coords[ 0 0 0 0 0 100 ] % ★開始円/終了円の座標と半径 [ x0 y0 r0 x1 y1 r1 ] /Extend [ false false ] % ★開始・終了点から色を延長する falseがデフォルト /Function << % 関数辞書の定義 /FunctionType 2 % 指数補間法 % 値は C0 + t ** N * (C1 - C0) /Domain [ 0 1 ] % [ 0 1 ] :デフォルト tは色関数への引数 バンド幅 /C0 [ 1 0 1 ] % ★開始色 マゼンタ /C1 [ 0 1 1 ] % ★終了色 シアン /N 1 % ★増加度合 1:デフォルト グラデーションのバランスを変える >> >> shfill % グラデーションで塗りつぶす
開始円を左上に置き、球のようなイメージにします。 /Coords[ -60 60 10 0 0 100 ] /C0 [ 1 0 1 ] % 開始色 イエロー /C1 [ 0 1 1 ] % 終了色 マゼンタ ex11.png
上記の設定でNを3にして、開始色のバランスを広くとっています。 /N 3 ex12.png
同じく上記の設定でNを0.5にして、終了色のバランスを広くとっています。 /N .5 ex12-2.png
開始円を終了円の外側に置いています。 /Coords[ -100 100 0 10 -10 100 ] /C0 [0 1 .5 ] % 開始色 グリーン /C1 [ 0 .5 1 ] % 終了色 ブルー ex13.png
終了色を拡張しています。 /ColorSpace /DeviceGray /Coords[ 0 0 0 0 0 100 ] /Extend [ false true ] /C0 [ 1 ] % 開始色 白 /C1 [ 0] % 終了色 黒 /N 4 ex14.png
線形シェーディングと放射シェーディングを組み合わせています。 バックのグラデーションが放射シェーディングの開始円の穴から見えています。 ex15.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:カラーグラデーション放射状 0 0 240 240 rectstroke 120 120 translate % 座標の原点を中央に移動 % バックのグラデーション << % シェーディングの辞書定義 /ShadingType 2 % 線形シェーディング /ColorSpace /DeviceRGB % 色空間定義 /Coords [ 0 -100 0 100 ] /Extend [ false false ] % 開始・終了点から色を延長する falseがデフォルト /Function << % 関数辞書の定義 /FunctionType 2 % 指数補間法 /Domain [ 0 1 ] % バンド幅/1:デフォルト /C0 [ 1 1 0 ] % 開始色 イエロー /C1 [ 1 0.6 0] % 終了色 オレンジ /N 1 % グラデーションのバランス >> >> shfill % グラデーションで塗りつぶす % フレアと青空 % 開始円が空いているためバックのグラデーションが見えている << /ShadingType 3 % 放射状シェーディング /ColorSpace /DeviceRGB /Coords[ 0 0 85 0 0 120 ] % 開始円/終了円の座標と半径 [ x0 y0 r0 x1 y1 r1 ] /Extend [ false true ] /Function << /FunctionType 2 /Domain [ 0 1 ] /C0 [ 1 1 0 ] % 開始色 イエロー /C1 [ 0 .5 1 ] % 終了色 ブルー /N .5 >> >> shfill


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

シェーディングパターン(自由形式)について [PostScript]

PS BASIC


三角形のメッシュを繋げて、形を作っていくシェーディング方法です。
三角形は次のパラメータで作っていきます。
エッジフラグ(1or 2) x座標 y座標 色値(0〜4個)

エッジフラグとは、どの三角形のエッジが共有されるかを定義するもので
エッジフラグ 0は三角形を新規作成する
エッジフラグ 1は頂点BCを共有し新たな点を追加して三角形を作成する
エッジフラグ 2は頂点ACを共有し新たな点を追加して三角形を作成する
という規則があります。

最初はどちらが1なのか2なのか分からなかったのですが、
A-C、B-Cは新たな三角形でA-Bとなるという事に気づいてから分かるようになりました。
★が付いたパラメータは変更可能です。色々と変えてみてください。

(注)
/ColorSpace色空間により/DataSourceの色値の個数が変わります。
/DeviceRGB 3個 /DeviceGray 1個 /DeviceCMYK 4個

【サンプルコード】
ex22-2.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:自由形式のグローシェディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 /w 50 def % 正三角形の幅の1/2 /h 3 sqrt 2 div w 2 mul mul def % 正三角形の高さ << % シェーディングの辞書定義 /ShadingType 4 % グローシェーディング /ColorSpace /DeviceRGB % ★色空間定義 /DataSource [ %★ エッジフラグ xy座標 色値 0 w h 0 1 1 % 頂点A0 0 w neg h 1 1 0 % 頂点B0 0 0 0 1 0 1 % 頂点C0 1 2 w mul neg 0 0 1 1 1 w neg h neg 1 1 0 2 w h neg 0 1 1 2 w 2 mul 0 1 1 0 2 w h 0 1 1 ] >> shfill % グラデーションで塗りつぶす
次の説明は分かりにくいかも知れませんが、図を見ていただければ分かるかと思います。 ①から時計回りで三角形を作っていきます。 (1)A0 B0 C0は新規に三角形を作るのでエッジフラグは0 0 w h 0 1 1 % A0 エッジフラグ x y R G B 0 w neg h 1 1 0 % B0 0 0 0 1 0 1 % C0 (2)新しい点C1を追加する。B0-C0に繋げるのでエッジフラグは1    B0-C0は新たな三角形ではA1-B1となる 1 2 w mul neg 0 0 1 1 (3)新しい点C2を追加する。B1-C1に繋げるのでエッジフラグは1    B1-C1は新たな三角形でA2-B2となる 1 w neg h neg 1 1 0 (4)新しい点C3を追加する。A2-C2に繋げるのでエッジフラグは2    A2-C2は新たな三角形でA3-B3となる 2 w h neg 0 1 1 (5)新しい点C4を追加する。A3-C3に繋げるのでエッジフラグは2    A3-C3は新たな三角形でA4-B4となる 2 w 2 mul 0 1 1 0 (5)新しい点C5を追加する。A4-C4に繋げるのでエッジフラグは2 2 w h 0 1 1 triangle-mesh01.png
ex20.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:自由形式のグローシェディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 << % シェーディングの辞書定義 /ShadingType 4 % グローシェーディング /ColorSpace /DeviceRGB % 色空間定義 /DataSource [ %エッジフラグ xy座標 RGB色値 0 0 0 1 0 1 % 頂点A0 0 100 100 0 1 1 % 頂点B0 0 -100 100 0 1 1 % 頂点C0 2 -100 -100 0 1 1 2 100 -100 0 1 1 2 100 100 0 1 1 ] >> shfill % グラデーションで塗りつぶす 三角メッシュex20.png
三角メッシュは定型な三角形とは限りません。 extest.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:自由形式のグローシェディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 /cyan { 0 1 1 } def % シアン /magenta { 1 0 1 } def % マゼンタ /yellow { 1 1 0 } def % イエロー << % シェーディングの辞書定義 /ShadingType 4 % グローシェーディング /ColorSpace /DeviceRGB % 色空間定義 /DataSource [ 0 40 100 cyan 0 -40 80 magenta 0 0 0 yellow 1 -100 10 cyan 1 -50 -20 magenta 2 -70 -90 yellow 2 30 -70 cyan 2 90 -90 magenta 2 100 0 yellow 2 60 30 magenta 2 40 100 cyan ] >> shfill % グラデーションで塗りつぶす


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

シェーディングパターン(ラティス形式)について [PostScript]

PS BASIC


ラティス形式と呼ばれるシェーディング方法です。
擬似矩形の頂点を設定して三角メッシュを作っていきます。
矩形の横方向の並びを行と言います。
矩形は次のパラメータで、座標を行単位で設定していきます。
x座標 y座標 色値(0〜4個)
VerticesPerRowは行の頂点数を指定します。
行の頂点が2なら矩形が1個、3なら2個、5なら3個になります。

★が付いたパラメータは変更可能です。色々と変えてみてください。

(注)
/ColorSpace色空間により色値の個数が変わります。
/DeviceRGB 3個 /DeviceGray 1個 /DeviceCMYK 4個

【サンプルコード】
ex30.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:ラティス形式のグローシェーディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 << % シェーディング辞書定義 /ShadingType 5 % ラティス形式のグローシェーディング /ColorSpace /DeviceRGB % ★色空間定義 /VerticesPerRow 2 % ★ラティスの行の頂点数(2以上) /DataSource [ % ★三角メッシュを定義する頂点座標と色値 -100 100 1 0 1 % 上の行の頂点 0 100 0 1 1 -100 0 1 1 0 % 下の行の頂点 0 0 1 0 1 ] >> shfill %グラデーションで塗りつぶす
ex30ex.png
ex31.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:ラティス形式のグローシェーディングによる三角メッシュ 0 0 240 240 rectstroke % 画面囲み 120 120 translate % 座標の原点を中央に移動 /cyan { 0 1 1 } def % シアン /magenta { 1 0 1 } def % マゼンタ /yellow { 1 1 0 } def % イエロー << % シェーディング辞書定義 /ShadingType 5 % ラティス形式のグローシェーディング /ColorSpace /DeviceRGB % ★色空間定義 /VerticesPerRow 3 % ★ラティスの行の頂点数(2以上) /DataSource [ % ★三角メッシュを定義する頂点座標と色値 % 100の高さの頂点 -100 100 magenta 0 100 cyan 100 100 magenta % 0の高さの頂点 -100 0 yellow 0 0 cyan 100 0 yellow ] >> shfill %グラデーションで塗りつぶす
ex31ex.png
ex32.png ※変更部分のコードのみ掲載しています。 /VerticesPerRow 3 % ラティスの行の頂点数(2以上) /DataSource [ % 三角メッシュを定義する頂点座標と色値 % 100の高さの頂点 -100 100 magenta 0 100 cyan 100 100 magenta % 0の高さの頂点 -100 0 yellow 0 0 cyan 100 0 yellow % -100の高さの頂点 -100 -100 magenta 0 -100 cyan 100 -100 magenta ]
ex32ex.png
縦に任意数つなげることが可能です。 ex32-3.png
座標の順番を変えることで三角メッシュの方向も変わります。 ただし座標は一筆書きのように順番に設定します。 ex35.png ※変更部分のコードのみ掲載しています。 /VerticesPerRow 2 /DataSource [ 0 100 yellow -100 100 magenta 0 0 yellow -100 0 cyan -100 0 cyan 0 0 yellow -100 -100 magenta 0 -100 yellow 0 -100 yellow 100 -100 magenta 0 0 yellow 100 0 cyan 100 0 cyan 0 0 yellow 100 100 magenta 0 100 yellow ]
latis.png
真四角である必要はありません。 ex35ex.png


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

座標変換(拡大・縮小)について [PostScript]

PS BASIC

座標変換にはスケーリング(拡大・縮小)、シェア(せん断)、ローテイト(回転)、鏡像、トランスレート(移動)などがあります。

concat.png

concatオペレータは座標変換が一度に出来て便利なのですが、パラメータの組み合わせが良くわからなかったりします。そこで組み合わせのサンプルを作りました。
最初は拡大・縮小と鏡像です。

グレー部分が元の図形で、変換後は赤で示しています。

【サンプルコード】
ctm_ノーマル.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:座標変換(拡大・縮小・鏡像) 0 0 240 240 rectstroke % 黒背景 120 120 translate % 座標の原点を中央に移動 2 setlinewidth % 線幅2ポイント /box { % 変形前の図形 .5 setgray -50 -50 100 100 rectfill % グレー四角形 .7 setgray -50 30 20 20 rectfill % 左上のグレー四角形 0 0 50 0 360 arc stroke % 円 -40 -10 moveto % (-40,-10)に移動 /Helvetica findfont 24 scalefont setfont (Sample) show % テキスト表示 } def /cbox { % 変形後の図形(赤) 1 0 0 setrgbcolor -50 -50 100 100 rectstroke -50 30 20 20 rectfill 0 0 50 0 360 arc stroke -40 -10 moveto /Helvetica findfont 24 scalefont setfont (Sample) show } def newpath % パスの初期化 box % 変形前の図形 gsave % グラフィックス状態の保存 [ 1 0 0 1 0 0 ] concat % 座標変換(ノーマル状態) newpath cbox % 変形後の図形(赤) grestore % グラフィックス状態の復元
% x方向を0.5倍 [ .5 0 0 1 0 0 ] concat ctm_拡大x0.5倍.png
% y方向を0.5倍 [ 1 0 0 .5 0 0 ] concatt ctm_拡大y0.5倍.png

% x方向を2倍 [ 2 0 0 1 0 0 ] concat ctm_拡大x2倍.png
% y方向を2倍 [ 1 0 0 2 0 0 ] concat ctm_拡大y2倍.png

% x方向を1.5倍 y方向を2倍 [ 1.5 0 0 2 0 0 ] concat ctm_拡大x1.5y2倍.png
% x方向・y方向を2倍 [ 2 0 0 2 0 0 ] concat ctm_拡大xとy2倍.png

% 左右反転 [ -1 0 0 1 0 0 ] concat ctm_左右反転.png
% 天地反転 [ 1 0 0 -1 0 0 ] concat ctm_天地反転.png

% 天地左右反転(180度回転) [ -1 0 0 -1 0 0 ] concat ctm_天地左右反転.png



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