Magic Object LogoSNS-FreeJapan日本ブルーリボンの会新世紀のビッグブラザーへ blog

GIMP と色変換

色に関する基礎知識があると、色変換には役立つ事が多い。今回はそんな事に関連する方法を紹介しようと思う。漫画原稿を作成する場合にも参考になるかも知れない。

※ 本ページでは、レイヤーにアルファチャンネルがあるモノとして、ピクセルサイズを計算しています。アルファチャンネルが無い場合は、1バイト引いた値になります。


色の基本はRGB

RGB( R:赤 G:緑 B:青) は一般的に「光の三原色」と呼ばれるモノだ。コレは人間の感色(感光)細胞がその三種類の光しか認識できない事を利用した表現方法だと言える。そう言った意味では自然な表現方法でもあるわけです。

※ ごく稀に、昆虫の様に4色判別できる人が存在するそうですが、ココでは無視します。

その為、表現できる領域も非常に広いとも言えます。こんな事は通常、意識する必要さえ無いのですが、印刷を前提としている場合は注意が必要です。多くのプリンターでは CMYK(C:シアン M:マゼンタ Y:イエロー K:キー・プレート→黒)で表現されており、表現できるは RGB よりも遥に狭いからです。特に、彩度が高い領域では表現できない色も多い為、印刷した場合には残念画質になりがちなのです。DTP ソフトがディスプレイのような RGB デバイスで CMYK エミュレーションを行っているのは、ワザワザ色数を制限する行為であり、苦肉の策とも言えるワケですね。CMYK の範囲内で見栄えをよくする為の涙ぐましい努力なのですから。

※ GIMP には CMYK モードは存在しませんが。プラグインを使用する事により、読み書きなら行えます。

※ GIMP 上で、CMYK をシミュレートする方法は存在します。詳しくはコチラをご覧下さい。

※ 最近のプリンターでは、インクの改良などにより、表現できる領域が少しずつ広がってきているそうです。もっとも、CMYK の亜種とも言える様で、プリンターによってはCMYK で編集する意味合いが、変わってくるのかもしれません。家庭用プリンターを利用するだけなら RGB だけで編集して、プリンターのドライバーまかせでも良いのでは?(ICCプロファイルやColorSyncといった色の同調が行える場合は、そちらを利用すると良いでしょう)

※ RGB モードでは黒は R=G=B=0 の状態であるため、ディスプレイの地の色が黒でない場合は正確な黒色は表現できません。

GIMP では1ピクセルが4バイト(RGBA→ R:赤 G:緑 B:青 A:アルファチャンネル)で表現されています。


彩度の無いグレースケール

グレースケールとは何なのでしょうか?端的に言ってしまえば明るさ(明度:光の強さ)の情報だけで表現された画像と言う事になります。これはつまり、彩度が無いとも言えますので、彩度に関する処理は行えません。例えば、彩度を上げる・下げるといった処理は、元の画像の彩度に掛け算・割り算を行うワケですが、ゼロに掛け算や割り算を行ったところで、結果としてゼロにしかならないからです。

そのため、カラー画像をグレースケールに変換した場合は RGB モードに戻しても、元には戻せないと思って下さい。

ただし、RGB モードであれば色情報を付加(新たに付け加える)事は可能です。

※ RGB モードでは R=G=B の関係が成り立ち 1ピクセルが4バイトです。
※ RGB から グレースケールモードへ変換する場合、( R+G+B ) / 3 で変換されるわけではありません。 これは、光の強さがRGBによって違うためです。


色数の制限のあるインデックスカラー

色を0~255のインデックスで表現し、それに対応するカラー・テーブル(カラー・パレットとも言います)を保持する表現方法です。有名な画像フォーマットに GIF などが存在します。色数の制限がある一方、グレースケール並みの画像サイズで表現できる特徴があります。ただし GIMP ではフィルターなどに使用制限があり、編集には適していません。RGBモードで編集を行い、ファイル出力の直前などにインデックスモードに変換するのが良いでしょう。

カラー・テーブルは使用されている色から作成する方法と、システムパレットなどを使用する方法などがあります。また、グレースケールテーブルを使用する事により、グレースケール画像を、白と黒だけのテーブルを使用することにより、2値化されたモノクロ画像を作成する事もできます。

GIMP では1ピクセルが2バイト(IA→I:インデックス A:アルファチャンネル)で表現されています。

※ GIF 画像では1ピクセルが1バイトで表現され、アルファチャンネルは割り当てられた1つのインデックス数値が使用され1階調に制限されます。


白と黒だけの画像

白と黒だけを表現するモード(いわゆるビットマップ)は存在しません。GIMP ではグレースケールかインデックスカラーで代用します。

※ 色情報を含む画像はピックスマップと呼ばれ、ビットマップとは呼びません。Windows BitMap は名称詐称です。これは Bit 情報が ON/OFF しか持ち得ない為で、点の「有る/無し」で表現されます。


カラーモードを変換

では早速、カラーモードの変換を行います。

サンプルとして、次の画像を使用します。(半分程度に縮小してあります)

色変換に使用するサンプル画像

まずはメニューの『画像』>『モード』を選択します。

GIMP カラーモードメニュー

ここから、『RGB』、『グレースケール』、『インデックス』に変換できる事がわかります。

※ 『画像』 メニュー内にある項目は、画像全体に適用されます。

また、モード(色空間)を変更せずに色を変更する場合には、『色』メニューから行います。

GIMP 色空間を変更しない色の変換

ココでは、より精度のの高い色変換が行えます。特に色変換に関連する項目を説明します。

『しきい値』…ある一定の明るさをを境界として、白黒への2値化を行います。

『ポスタリゼーション』…使用する色数を制限します。インデックスカラーへの変換やモノクロ印刷への前処理などに使用できます。

『脱色』…彩度を破棄してグレースケール画像を作成できます。

『マップ』… 使用されている色を、別の色へと再マップします。インデックスカラーへの変換に利用できます。

『単色塗り』…例えば、セピア色の画像に変換する場合などに利用できます。 

※ 『色』メニューにある項目は、選択されているモノ(レイヤーや選択範囲など)に適用されます。部分的に色を変更したい場合などにも利用できます。


漫画のような画像に変換

例えば漫画原稿は白と黒で表現されており、グレースケールではない。編集中はグレースケールの方が便利なのだが、印刷を前提としているなら、一手間掛けた方が綺麗に出力できる。

そこで幾つかの段階を経て、それらしい画像にしてみよう。

まずは、メニューから、『画像』>『モード』>『グレースケール』で変換を行う。

グレースケールのサンプル

このままでは、印刷した時に完全にプリンター任せになってしまうので期待通りにはなりにくい。

そこでまず、肌の部分に注目してもらいたい。元々が肌色であったため。印刷した時には弱いグレーになってしまう。
そこで、『色』メニューの『レベル』で 修正を行う。ある程度より明るい部分は「白」にしたいので、切り捨て処理を行うためだ。

GIMP 明るさの調整

『入力レベル』の明るい部分は右側になるので、ある明るさより上は全て「白」とみなすように、上限を設定します。
これにより、肌の影の部分以外は「白」にする事ができます。
※ 特定の領域のみを修正したい場合は、目的の部分のみを選択するようにして下さい。

実際の漫画原稿ではスクリーントーンを使用しており、色数が数種類に制限されている事を思い出してもらおう。

そこで今度は『色』メニューの『ポスタリゼーション』を行う。グラデーションも残したいので、色数を64に制限してみる。
※ グレースケールは元々が256色なので、1/4である。

GIMP ポスタリゼーションダイアログ

64色に変更した結果

色数を制限されたグレースケール

さて、今度は2値化(白黒化)を行うのであるが、注意してもらいたい事がある。

プリンターは複数の点で濃淡を表現しているのである。例えば1つのピクセルを4x4で表現している場合、縦横4倍の画像サイズが必要になる。(データサイズは16倍)

もしも、プリンターの解像度が分かっている場合は、それに合わせるのが理想型だ。

例えば元の画像が 300 DPI で、プリンターの解像度が 1200 DPI  のの場合、画像サイズを 400% にしておこう。

GIMP 画像の拡大

※ プリンターの解像度に合わした場合、補完は意味が無いので外しておこう。

次に、メニューの『フィルタ』>『変形』>『新聞印刷』で変換を行う。

GIMP 新聞印刷フィルターダイアログ

※ 場所によってスクリーントーンのイメージを変えたい場合は、マスクを作成して部分ごとに変更しよう。(マスクの使い方側から無い場合はコチラ) 

さて、結果を見てみよう。

GIMP 変換結果比較

上がグレースケールを拡大・2値化した結果で、下が漫画の様な処理を行った結果だ。(100% 表示)

変換結果はコチラ。 

グレースケールを単純に印刷しただけでは、おそらく上の様な画像になっていたハズだ。

もっとも、カラー画像を漫画原稿のように変換する処理が必要かどうかは非常に微妙な気がするのだが、参考になっただろうか?