グラフィック状態

グラフィック状態
グラフィックには、色や線の太さなどのパラメータ値が存在し、それらは「グラフィック状態」と呼ばれます。

PDF ビューアは、内部でそのグラフィック状態を保持しており、ページ内では、現在設定されている各パラメータ値が維持されます。

このグラフィック状態は、すべての項目を一つにまとめた状態で、スタック上に PUSH (格納) したり、POP (取り出し) することができます。
特に、変換行列を元に戻す時などによく使われます。

各グラフィック状態は、グラフィック命令を使って設定するものと、グラフィック状態の辞書にエントリを含めることで設定するものがあります。

まずは、グラフィック状態の各項目の説明をします。

なお、描画色などは、ストロークの描画時用と、それ以外の描画用に分かれています。
ストローク以外の描画用は、塗りつぶし時など、ストローク以外を描画する時に使われます。

出力デバイスに依存しないグラフィック状態
CTMarray変換行列
クリッピングパス-現在のクリッピングパス。
default = 出力ページにおいて画像化可能な部分全体
色空間name or array現在の色空間。
default = DeviceGray (グレイスケール)
描画色色々現在の描画色。値の指定は色空間による。
default = 黒
テキスト状態色々テキストの描画に関する9つのパラメーターのセット。
フォントの選択、グリフのスケーリング、他の効果などのパラメーターが含まれる。
線の太さnumberストロークの線の太さ (ユーザー空間単位)。
default = 1.0。

0 は、デバイスの解像度で描画できる最も細い線。
線の形状 (line cap)integerストロークの閉じられていない端の形状。
default = 0。

0 (Butt cap) : パスの終点で四角にする。
1 (Round cap) : 線幅を直径とする半円が描かれる。
2 (Projecting square cap) : パスの終点から線幅の半分を延ばして四角にする。
線の結合 (line join)integerストロークの接続されている部分の結合形状。
default = 0。

0 (Miter join) : 線の外側の縁は、2つが交わるまで延長される (鋭利な三角になる)。
角度が鋭すぎる場合は、代わりに Bevel join が使われる。
1 (Round join) : 線幅を直径とする円弧が描かれる (角丸)。
2 (Bevel join) : Butt cap で終点を仕上げた後、端の部分は三角形で塗りつぶす。
miter limitnumber結合の形状に Miter join が指定されている場合、Bevel join に切り替える制限値。
接続部分のストロークの、内側から外側の縁までの距離と、線幅の比率で指定する。
default = 10.0 (約 11.5 度)。

miterLength / lineWidth = 1 / sin(angle / 2)
破線パターンarray + numberストロークの破線パターン。
default = 実線。

「破線のパターンの配列」と「フェーズの数値」の2つを、ユーザー空間単位で指定する。
配列の要素は、実線と空白を交互に繰り返す長さ。1 以上の数値を指定する。
フェーズは、開始位置。パターンで生成された線に、この値のオフセットを追加する形となる。

[] 0     | 実線
[3] 0    | ***___***___
[2] 1    | *__**__**
[2 1] 0  | **_**_**_
[3 5] 6  | __***_____***_____
[2 3] 11 | *___**___**___

各破線の終端は line cap で処理され、角は line join で処理される。
複数のサブパスで構成されるパスの場合は、各サブパスは独立した線となる。
rendering intentnameCIE ベースの色をデバイスの色に変換するときに使用されるレンダリングインテント。
default = RelativeColorimetric
stroke adjustmentboolean(PDF 1.2) 出力デバイスのピクセル解像度に比べて、小さい線幅でストロークを描画するときに、可能なラスタ化効果を補正するかのフラグ。
default = false
blend modename or array(PDF 1.4) 透明なイメージングモデルで使用される現在のブレンドモード。
このパラメータは、透明グループ XObject の実行の開始時に、暗黙的に初期値にリセットされる。
default = Normal
soft maskdictionary or name(PDF 1.4) 透明なイメージングモデルで使用する、マスク形状またはマスク不透明度の値を指定するソフトマスク辞書、または、そのようなマスクが指定されていない場合は /None という名前。
このパラメーターは、透明グループ XObject の実行の開始時に暗黙的に初期値にリセットされる。
default = /None
alpha constantnumber(PDF 1.4) 透明なイメージングモデルで使用される、一定の形状または一定の不透明度値。
このパラメーターは、透明グループ XObject の実行の開始時に暗黙的に初期値にリセットされる。
default = 1.0
alpha sourceboolean(PDF 1.4) 現在の soft mask と alpha constant パラメーターを、形状値(true)または不透明度値(false)として解釈するかどうかのフラグ。
このフラグは、画像辞書内の SMask エントリ(存在する場合)の解釈も管理する。
default = false
overprintboolean(PDF 1.2) false の場合、描画時に色がない部分を消去する。
true の場合、色がない部分は消去せず、以前に描画された状態のままにする。
default = false
overprint modenumber(PDF 1.3) overprint = true の時、DeviceCMYK 色空間の色値 0 を消去するか (0)、そのままにするか (1)。
default = 0
出力デバイスに依存するグラフィック状態
black generationfunction or name(PDF 1.2) RGB カラーを CMYK に変換するときに使用するブラックカラーコンポーネントのレベルを計算する関数。
default = インストール依存
undercolor removalfunction or name(PDF 1.2) シアン、マゼンタ、イエローの色成分のレベルの減少を計算して、黒生成によって追加された黒の量を補正する関数。
default = インストール依存
transferfunction, array, or name(PDF 1.2) デバイスのグレーまたはカラーコンポーネントレベルを調整して、特定の出力デバイスの非線形応答を補正する機能。
default = インストール依存
halftonefunction, stream, or name(PDF 1.2) グレーおよびカラーレンダリング用のハーフトーンスクリーン。
ハーフトーン辞書またはストリームとして指定されます。
default = インストール依存
flatnessnumber出力デバイスで曲線がレンダリングされる精度。
このパラメーターの値は、出力デバイスのピクセルで測定された最大許容誤差を示します。
数値が小さいほど曲線が滑らかになりますが、計算量とメモリ使用量が増えます。
default = 1.0
smoothnessnumber(PDF 1.3) 出力デバイス上で色のグラデーションをレンダリングする際の精度。
このパラメーターの値は、各色成分の範囲の一部として表される最大許容誤差を提供します。
数値が小さいほど色が滑らかになりますが、計算量とメモリ使用量が増えます。
default = インストール依存
グラフィック状態を設定する命令
グラフィック命令で各状態を設定する場合は、以下の命令を使います。
ページが変わった場合は、設定は引き継がれません。

オペランド命令説明
-qグラフィック状態をスタックに保存
-Qグラフィック状態をスタックから復元
a b c d e fcm現在の変換行列を変更 (配列ではなく6つの数値を指定)
数値w線の太さを設定
数値Jline cap スタイルを設定
数値jline join スタイルを設定
数値Mmiter limit を設定
配列 フェーズd破線パターンを設定
intentri(PDF 1.1) カラーレンダリングインテントを設定
数値i平坦度の許容値を設定 (0〜100)
名前gs(PDF 1.2) 指定された任意の名前のパラメータを設定。
現在のリソース辞書の ExtGState エントリの辞書の中にある、
グラフィックス状態パラメータ辞書の名前を指定する。
グラフィック状態パラメータ辞書
グラフィック状態の一部は、任意の名前で定義したものを、まとめて gs 命令で設定することができます。

単一ページ内、または複数のページで、同じグラフィック状態を複数回設定する場合に有用です。

グラフィック状態の定義は、ページオブジェクト(またはページツリーノード)の Resources エントリ内で行います。

Resources エントリの辞書の中に、ExtGState エントリを含めて、その値となる辞書で定義します。
辞書のキーに「グラフィック状態の任意の名前」を、値に「パラメータ辞書への間接参照」を指定します。

なお、Resources エントリは、子孫のページに継承可能であるため、複数のページで同じリソースを使うことができます。

gs 命令では、オペランドとして、辞書で定義した任意の名前を指定します。
グラフィック状態パラメータ辞書
Typename(オプション) オブジェクトのタイプ。常に /ExtGState
LWnumber(PDF 1.3) 線の太さ
LCinteger(PDF 1.3) line cap スタイル
LJinteger(PDF 1.3) line join スタイル
MLnumber(PDF 1.3) miter limit
Darray(PDF 1.3) 破線パターン。
[パターン配列 フェーズ] の配列で指定。
RIname(PDF 1.3) レンダリングインテントの名前
OPbooleanオーバープリントを適用するかどうか。
op が指定されていない場合は、ストローク用とストローク以外用の両方のパラメータを設定します。
op が指定されている場合は、ストローク用のパラメータのみ設定します。
opboolean(PDF 1.3) オーバープリントを適用するかどうか (ストローク以外用)
OPMinteger(PDF 1.3) オーバープリントモード
Fontarray(PDF 1.3) フォントの指定。
[font size] の配列で指定する。
font はフォント辞書への間接参照で、size は文字サイズ (テキスト空間単位の数値)。
BGfunction[0.0 1.0]→[0.0 1.0] にマッピングする黒色の生成関数
BG2function or name(PDF 1.3) BG と同じだが、値に /Default が使用可能。
Default の場合、ページ開始時に有効な関数を示す。
BG も存在する場合は、こちらが優先される。
UCRfunction[0.0 1.0]→[-1.0 1.0] にマッピングする undercolor-removal 関数
UCR2function or name(PDF 1.3) BG/BG2 の場合と同じ
TRfunction, array, or name[0.0 1.0]→[0.0 1.0] にマッピングする伝達関数。
単一の関数、または4つの関数の配列、または /Identity。
TR2function, array, or name(PDF 1.3) BG/BG2 の場合と同じ
HTdictionary, stream, or nameハーフトーン辞書、またはストリーム、または /Default。
FLnumber(PDF 1.3) 平坦度の許容範囲
SMnumber(PDF 1.3) 滑らかさの許容範囲
SAbooleanストロークの自動調整を適用するかどうか
BMname or array(PDF 1.4) 透明なイメージングモデルで使用される現在のブレンドモード
SMaskdictionary or name(PDF 1.4) 透明なイメージングモデルで使用するマスク形状またはマスク不透明度の値を指定する現在のソフトマスク
CAnumber(PDF 1.4) 透明なイメージングモデルで使用される一定の形状または一定の不透明度の値を指定する現在のストロークアルファ定数 (ストローク用)
canumber(PDF 1.4) CA と同じだが、ストローク以外用
AISboolean(PDF 1.4) アルファソースフラグ。
現在のソフトマスクとアルファ定数を、形状値(true)または不透明度値(false)として解釈するかどうか。
TKboolean(PDF 1.4) 透明イメージングモデルのテキストオブジェクト内で重複するグリフの動作を決定するテキストノックアウトフラグ
使用例
>> 11.pdf

line cap と line join の各スタイルの確認と、グラフィック状態パラメータ辞書による設定を行っています。

3 0 obj
<< /Type /Page
   /Parent 2 0 R
   /MediaBox [ 0 0 612 792 ]
   /Resources 4 0 R  % リソース辞書
   /Contents 6 0 R
>>
endobj

%% リソース辞書
4 0 obj
<< /ExtGState << /GS1 5 0 R >> % /GS1 という名前で定義
>>
endobj

%% グラフィック状態パラメータ辞書 (/GS1 の内容)
5 0 obj
<< /Type /ExtGState
   /LW 2  % 線の太さ
   /LC 0  % join cap = 0
   /D [[1 2] 0] % 破線パターン
>>
endobj

6 0 obj
<< /Length 231 >>
stream
1 0 0 -1 0 792 cm % 左上原点→左下原点への変換
8 w % 線の太さ
50 50 m 200 50 l S % 直線を描画
1 J % join cap = 1
50 100 m 200 100 l S
2 J
50 150 m 200 150 l S
0 J [5 3] 0 d % join cap = 0, 破線パターン
50 200 m 200 200 l S
[] 0 d % 実線に戻す
300 50 100 100 re S % 四角形
1 j % line join = 1
300 200 100 100 re S
2 j
300 350 100 100 re S
/GS1 gs % /GS1 の内容を適用
50 250 m 200 250 l S
endstream
endobj