【基本-3】シェーディングパターン(線形)について

グラデーションについて紹介します。
海外のサイトではグラデーションの見本をみかけますが、日本ではあまり解説したサイトはないようです。まあ、グラデーションはグラッフィックスアプリで簡単にできるので、あえて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が効きません。
コード内の<< >>は本来英語記号ですが、ここでは入力できないため日本語記号<< >>を使用しています


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
%!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 ] % ★(オプション)背景色
    % ★軸の開始点と終了点の座標を指定 [ x0 y0 x1 y1 ]
    /Coords [ 0  -100  0  100 ]
    %(オプション)シェーディング領域の指定  [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 ] % 終了色 黒

CMYKの場合下記の3行を変更します。
/ColorSpace /DeviceCMYK
/C0 [ 0 1 0 0 ] % 開始色 マゼンタ
/C1 [ 1 0 0 0 ] % 終了色 シアン

グラデーションの方向と色を変えます
/Coords [ -100 0 100 0 ] % 軸の開始点と終了点の座標を指定 [x0 y0 x1 y1 ] /C0 [ 1 1 0 ] % 開始色 イエロー
/C1 [ 1 0 1 ] % 終了色 マゼンタ

斜め方向のグラデーション
/Coords [ -100 -100 100 100 ] /C0 [ 1 0 0 ] % 開始色 レッド
/C1 [ 1 1 0 ] % 終了色 イエロー

/Coords [ -100 0 50 0 ] % 終了点を短くしています。
(目盛りは参考のため付けています。)

/Coords [ -100 0 50 0 ] /Extend [ false true ] % 終了点から色を延長しています。

/N 2 % 開始色のバランス大きくしています。
(0および負数は指定できません)

/N .5 % 終了色のバランス大きくしています。

2つのグラデーションを配置した3色のグラデーションです。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
%!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 &lt;&lt; % 関数辞書の定義
        /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色グラデーションを調整してテキストに適用。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
%!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