AM スクリーニングのスポット関数
一つ前のブログ「AM スクリーニング」の説明で、通常の印刷プロセスでは、ハーフトーンセル中のピクセルの割合でトーン(濃度)の表現をしていると説明したが、PostScript の AM スクリーニングでは、スポット関数 (SpotFunction) と呼ばれる PostScript 手続きが、トーンの変化に対してピクセルを置く順番を規定している。PDF でもスポット関数の仕組みは基本的に同じであるが、PDF の場合は、一般的に使用される定義済みのスポット関数を名前で指定するようになっている。PDF リファレンス第 2 版の表 6.1 に定期済みのスポット関数と PostScript 言語のスポット関数が記載されているので、参考にされたい。
ハーフトーンセルは固有の座標系をもっており、原点はセルの中心で、x 座標と y 座標は -1.0 ~ 1.0 の範囲で表わされる。PostScript インタープリタは、ハーフトーンセル内部のそれぞれのピクセル位置に対する x y 座標をオペランドスタックにプッシュした後、このスポット関数を呼び出す。スポット関数内の手続きが、オペランドスタックにプッシュされているこれら座標値を読み出し、手続きに従った計算を行い、ピクセルを白にする優先順位を現わす数値 (-1.0 ~ 1.0) を返す(オペランドスタック上に返す)。PostScript インタープリタは、そのときのグレイレベルに応じて、どのピクセルを ON にするかをこの返値から判断しドットを形成する。尚、この返値のレベルには意味がなく、それぞれのピクセルに対する返値における相対的な比較のみが意味を持つ。
白から黒へとグレーレベルが変化するとき、ハーフトーンセル内部のピクセルを置く順番は、大きい値を返したピクセル位置から順番に置かれるように制御される。もし複数のピクセル位置が同じ数値であった場合は、任意のピクセルが選択される。
例えば、以下のスポット関数は、単純円形ドット (SimpleDot) のスポット関数の手続きである。
{dup mul exch dup mul add 1 exch sub}
この単純円形ドットは、もっとも引き締まった形状であり、ドットゲインの影響を最も受けにくく、ハイライト部の表現に優れている(デバイスの臨界点ぎりぎりのハイライト部で安定したドット表現力を発揮する)。しかしながら、シャドー部の表現力に乏しい(シャドー部では、白く抜けるところの形状がシャープな菱形となり、潰れ易い)という欠点がある。また、約 78.5% の濃度のところで、隣接する四方のドット同士が同時に接触し、トーンジャンプが発生する。四方のドット同士が同時に接触することを避けるために、4軸対象性のドット形状ではなく、2軸対象性の楕円形や、ダイヤモンド型(菱形)のドット形状が使用されることもある。もしシャドー部で最良の結果を出したいのであれば、反転円形ドットが好ましいが、逆にハイライト部における表現力に問題がある。このように、ドット形状には、長所と短所があり、印刷物の特質によって、いろいろな形状のドットが組み合わされる。例えば、最も標準的に使用されている幾何学形状混成ドット (euclidean composite dot) では、単純な円形ドットと、反転円形ドット (InvertedSimpleDot) が組み合わされており、ハイライト部とシャドー部の両方で表現力を高めている。
とはいえ、このスポット関数の手続きを眺めただけで、どのようなドット形状になるかを理解することは難しい。理解するには PostScript の知識が少々必要だ。そこでスポット関数の手続きがどのようなドット形状を形成するのかの理解を助ける PostScript プログラムを紹介する。
以下プログラム内の /screening {dup mul exch dup mul add 1 exch sub} def の{ }の内側がスポット関数の手続きであり、この部分を変更することにより、さまざまなスポット関数のドット形状で評価できる。
使用方法は至って簡単で、スポット関数手続き部分を編集した PostScript ファイルを、Acrobat Distiller や Jaws ToPDF といった PostScript を PDF に変換するアプリケーションに、ファイルをドラッグ&ドロップし、生成された PDF を閲覧するだけだ。表示された PDF には、最初に置く優先順位が高いところがより黒く表現されており、数値が大きいところほど優先順位が高いことを示す。
==================================================================
%!PS-Adobe-3.0
%%Title: Screen test
%%Creator: Hagi-san
%%Copyright (c) 2009 Hagi-san. All rights reserved.
%%EndComments
/hagidict 10 dict def
hagidict begin
/size 16 def
/psize 30 def
/Courier findfont 25 scalefont setfont
50 50 translate
/screening {dup mul exch dup mul add 1 exch sub} def
%/screening {dup mul .9 mul exch dup mul add 1 sub} def
/xxx 0 def
/yyy 0 def
/tone 0 def
/incr {2 size 1 sub div} def
/box1 {
gsave
5 setlinewidth
0 0 1 setrgbcolor
0 psize 1 sub rlineto
psize 1 sub 0 rlineto
0 psize 1 sub neg rlineto
psize 1 sub neg 0 rlineto
gsave
stroke
grestore
tone 1 add 2 div 1 exch sub setgray
fill
grestore
1 0 0 setrgbcolor
2 2 rmoveto tone 1 add 100 mul 2 div cvi ( ) cvs
show
} def
/box {
gsave
xxx 1 add 2 div psize size mul mul
yyy 1 add 2 div psize size mul mul
moveto
box1
grestore
} def
-1 incr 1 {
/yyy exch def
-1 incr 1 {
/xxx exch def
xxx yyy screening /tone exch def
box
} for
} for
showpage
コメント