色空間

色空間
PDF で、ストロークや塗りつぶしなどの色を指定する際には、まず、色空間を指定する必要があります。
(色空間の概念は PDF 1.1 で追加されました)

グラフィック命令で描画色などを指定する際には、各色空間に応じた値を指定します。

デフォルトの色空間はグレイスケール (DeviceGray) で、色の初期値は黒となっています。
色空間の種類
「デバイスの色空間」「CIE ベースの色空間」「特殊な色空間」の3つに分けられます。

デバイスの色空間(PDF 1.1) DeviceGray, DeviceRGB, DeviceCMYK
CIE ベースの色空間(PDF 1.1) ColGray, ColRGB, Lab
(PDF 1.3) ICCBased
特殊な色空間(PDF 1.1) Indexed
(PDF 1.2) Pattern, Separation
(PDF 1.3) DeviceN
デバイスの色空間
デバイスの色空間 (出力デバイスにおける色空間) は、以下の3つが使用できます。
基本的にはこれらを使います。

DeviceGrayグレイスケール。
色は1つの数値。0.0 (黒)〜1.0 (白)
DeviceRGBRGB。
色は 0.0〜1.0 の範囲の3つの数値 (R G B の順)
DeviceCMYKCMYK。印刷用です。
色は 0.0〜1.0 (インクの量) の範囲の4つの数値 (C M Y K の順)

CS, cs 命令で色空間が設定された場合、色の初期値は黒に設定されます。
色関係のグラフィック命令
オペランド命令説明
nameCS(PDF 1.1) ストローク描画用の色空間を設定。

色空間が追加パラメータなしで指定できるタイプの場合 (DeviceGray など) は、タイプの名前を指定します。
追加パラメータが必要なタイプの場合、リソース辞書の ColorSpace エントリの辞書で定義された名前を指定します。
namecs(PDF 1.1) 塗りつぶしなど、ストローク以外の描画用の色空間を設定。
値は CS と同じ。
colorSC(PDF 1.1) ストロークの色を設定。値は各色空間によります。
colorSCN(PDF 1.2) SC と同じ。
Pattern, Separation, DeviceN, ICCBased のタイプがサポートされている。
colorsc(PDF 1.1) ストローク以外の色を設定
colorscn(PDF 1.2) ストローク以外の色を設定。
Pattern, Separation, DeviceN, ICCBased のタイプがサポートされている。
grayG, g色空間を DeviceGray に設定し、同時に色を設定する。
G はストローク用、g はストローク以外用。
r g bRG, rg色空間を DeviceRGB に設定し、同時に色を設定する。
RG はストローク用、rg はストローク以外用。
c m y kK, k色空間を DeviceCMYK に設定し、同時に色を設定する。
K はストローク用、k はストローク以外用。
CIE ベースの色空間
CIE ベースの色空間では、人間の視覚に関連する方法で色を指定することで、異なる出力デバイスで一貫した結果を出します。

色空間の指定時は、色空間のタイプの名前と、パラメータを、配列で指定します。

ここでは、ICC プロファイルを使用する ICCBased のみ説明します。
ICCBased [PDF 1.3]
ICC (International Color Consortium) で定義されているカラープロファイルに基づいた色空間を指定します。

色空間の指定時は、[ /ICCBased stream ] という形で記述し、stream には、ICC プロファイルのデータが含まれたストリームオブジェクトを指定します。

このストリームの辞書には、以下の追加エントリを含めます。

Ninteger(必須) プロファイルの色空間の色成分の数。
グレイスケールなら1、RGB なら3、CMYK なら4。
Alternatearray or nameストリームデータで指定された色空間がサポートされていない場合に使用される代替色空間。
N で指定された色成分を持つ色空間を指定する (Pattern を除く)。
省略された場合、DeviceGray, DeviceRGB, DeviceCMYK のいずれか。
Rangearray各色成分の最大値と最小値を指定した配列。
[min0 max0 min1 max1...]
ICC プロファイルの情報と一致する必要がある。
デフォルトは 0.0 と 1.0。
Metadatastream(PDF 1.4) メタデータストリーム

なお、PDF の各バージョンによって、対応している ICC 仕様バージョンが異なります。

1.33.3
1.4ICC.1:1998-09 および ICC.1A:1999-04
1.5ICC.1:2001-12
1.6ICC.1:2003-09
1.7ICC.1:2004-10

新しい ICC バージョンも使用することは出来ますが、確実に対応できるとは限らないため、出来るだけ PDF バージョンに応じたバージョンのものを使用するか、代替色空間を指定してください。

印刷用途に使う PDF の場合、RGB 色空間にする場合は、プロファイルを埋め込むことが推奨されます。
(プロファイルを指定せずに作成した場合、通常は sRGB として扱うのが一般的です)
CMYK 色空間の場合は、プロファイルを埋め込む必要はありません。
使用例
DeviceRGB
>> 12.pdf

/DeviceRGB CS
/DeviceRGB cs
0 0 1 SC % ストロークの色を青に
1 0 0 sc % 塗りつぶしの色を赤に
200 500 200 200 re
b % ストロークと塗りつぶしを描画

-------------
(この場合、以下でも同じです)

0 0 1 RG % DeviceRGB に設定して色をセット
1 0 0 rg
200 500 200 200 re
b

※ストローク用とストローク以外用で色空間を別に設定することができますが、同じページ内では色空間を統一した方が良いです。
ICCBased
3 0 obj
<< /Type /Page
   /Parent 2 0 R
   /MediaBox [ 0 0 612 792 ]
   /Resources 5 0 R
   /Contents 7 0 R
>>
endobj

% リソース辞書
5 0 obj
<< /ColorSpace << /CS1 [/ICCBased 6 0 R] >> % /CS1 という名前で色空間を定義
>>
endobj

% ICCBased のストリーム
6 0 obj
<< /Length 700988
   /Filter /ASCII85Decode
   /N 4  % 色成分4個 = CMYK
>>
stream
...ICC profile...
endstream
endobj

% コンテンツストリーム
7 0 obj
<< /Length 58 >>
stream
/CS1 CS % 色空間を /CS1 という名前で定義されたものに設定
/CS1 cs
0 0 1 0 SC % CMYK 色
1 0 0 0 sc
200 500 200 200 re
b
endstream
endobj