2013年5月9日木曜日

epsファイルの精度とRIP演算



■ %%BoundingBox: 0 0 73 72

イラストレータでデザインをしたあと、epsファイルに保存する。
このとき、デザインした画像は、デザイン画が入る最小の大きさの四角形として保存される。この四角形は、バウンディングボックス(BoundingBox)として数値的に記述され(下記の例)、それは整数となっている。
また、この単位は、ポイント(point=1/72inch)になっている。
*PostScriptの演算単位はポイント。

%%BoundingBox: 0 0 73 72
左下を原点(0,0)として、右上の値が(73,72)という意味。

この例は、イラストレータで「1.0010x1.0inch」の四角形(線幅=0.0)を描いたときの例である。
epsファイルのBoundingBoxの値は、1.0010inch=72.072pointとポイントに変換したあと整数化(切り上げ)されて「73point」となっている。

この精度(誤差)は0.0138889mm(13.9um)となり、大きい。

73-72point=1point
1point=1/72inch=0.0138889mm

epsファイルを処理するアプリケーションは、epsファイルに記載されたこの「0 0 73 72」pointの値を使って処理を行うことになる。すなわち、イラストレータで「1.001mm」と1ミクロンに接近した値を指定したとしても、epsファイルに保存するときに、細かな値は丸められてしまうわけで、目的の精度は出ない。


■ %%HiResBoundingBox: 0 0 72.0723 72

その誤差を小さくするために、「HiResBoundingBox」という規定があり、小数点以下4桁を表示する項目が加わっている。高精度の描画を行うときには、こちらの値を使うことになる。
*1.0010inchが72.0720pointではなく、72.0723pointになる理由は不明

しかし、PostScriptの演算においては規定により2桁目までが有効桁数であるため、小数点以下3桁目は切り捨てられるので、実際には「72.07point」で演算される。

その精度(誤差)については「0.01point(0.139um)」ととなり、「%%BoundingBox: 0 0 73 72」の100倍良くなる。


■ 検証

方正が販売しているEagleRIPを調べてみたが、HiResBoundingBoxの値を使っていた。
すなわち、横:1.00013inch(72.00936point)、縦:1.000inch(72.000point)の四角形をイラストレータで描く(線幅=0.00とする)。
epsCS3で保存した結果は、下記の通りである。

%%HiResBoundingBox: 0 0 72.0093 72

そして、精度を上げて高解像度6000dpiでRIP処理をおこない1bitTIFFへ保存して、Tag情報を調べた。その結果、横=縦=6001pixelとなった(1pixelはRIPの処理システム上の誤差)。

すなわち、6000pixel=72.00point(1.00inch)x6000dot/inchという検算結果から、3桁目の「9」は切り捨てられ、「72.00point」としてPostScriptの規定通りRIP演算されたということになる。

1.001inchの場合は、6007x6001pixel(+1は誤差)となり、3桁目が切り捨てられた確かに72.07pointでの演算で処理がおこなわれていた。

72.01/72)x6000=6005.833=6006pixel

{NJ-2013-5-9}