画像フォーマットコンバータ¶
画像フォーマットコンバータについて¶
画像フォーマットコンバータ ( krkrimg ) は、吉里吉里で使う画像の相互変換を行うためのツールです。
吉里吉里2 の画像フォーマットコンバータ ( krkrtpc.exe ) の後継で、変換の規則 (不透明な画像と透明部分のある画像で別々の形式にする、完全透明部分の色の処理、ltAddAlpha への変換、タグ情報) は旧版と同じです。
ほかの標準ツールと同じく、起動するとブラウザのウィンドウが画面になります。画面を開かずにコマンドラインで使うこともできます (後述の「コマンドラインでの使い方」参照)。
入力ファイルフォーマットとしては BMP, PNG, JPEG, TLG5, TLG6, PSD, CLIP STUDIO (.clip)、出力ファイルフォーマットとしては BMP, PNG, TLG5, TLG6, JPEG のいずれかを選択できます。
吉里吉里が用いるようなメイン/マスク分離形式の透過画像を読み込んだり、出力する事もできます。ここで用いている「マスク」という用語はアルファチャネルと同義です。
また、PSD / CLIP のレイヤを 1 枚ずつ画像として書き出すこともできます (後述の「レイヤの書き出し」参照)。
基本的には画像フォーマットを変換するだけなので、これで出力した画像 (TLG 以外) は、他のソフトやツールにも使えます。
なお、このツールに限ったことではありませんが、バックアップはお忘れなく!
入力画像フォーマット¶
入力ファイルフォーマットとしては、以下の形式を用いることができます。形式はファイルの中身から判定します。
- BMP
Windows 標準ビットマップ形式です。32 bit (bpp) 形式の BMP はアルファチャンネル付き BMP であると見なされます。
その他の形式の BMP は、不透明な画像(透過情報を持たない画像)であると見なされます (後述のメイン/マスク分離形式に用いた場合を除く)。
- PNG
Portable Network Graphic 形式です。透明部分のある(アルファチャネルや透過情報を持った) PNG も読み込むことができます。
oFFs / vpAg / pHYs チャンクを持つ PNG は、その情報をタグ情報として引き継ぎます (後述の「タグ情報」参照)。
- JPEG
フルカラーとグレイスケールの一般的な JPEG 形式を読み込めます。後述のメイン/マスク分離形式の入力として使うこともできます。
- TLG5 / TLG6
吉里吉里の TLG 形式です。タグ情報も読み込みます。
タグ情報に mode=alpha または mode=addalpha を持つ TLG は、その mode に従って ltAlpha 形式 / ltAddAlpha 形式の画像として扱います (後述の「入力を ltAddAlpha 形式とみなす」の指定よりも優先されます)。
- PSD
Adobe Photoshop の形式です (PSB も読み込めます)。
レイヤから画像を合成して読み込みます。合成には psdparse を使っており、「通常」以外のブレンドモード、レイヤー効果、調整レイヤも含めて合成します。レイヤを含まない PSD や、レイヤから合成できない PSD は、ファイルに保存されている合成画像を使います。
合成した結果を 1 枚の画像として変換します (どのブレンドモードのレイヤを含んでいても、出力される mode タグは後述の opaque / alpha / addalpha のいずれかです)。レイヤごとのブレンドモードを生かしたい場合は「レイヤの書き出し」を使ってください。
この形式はメイン/マスク分離形式としては読み込むことができません。
- CLIP STUDIO (.clip)
CLIP STUDIO PAINT の形式です。clipparse を使ってレイヤから画像を合成して読み込みます。
この形式はメイン/マスク分離形式としては読み込むことができません。
- メイン/マスク分離形式
メイン/マスク分離形式は、メイン(色情報)の画像とマスク(透過情報)の画像が別々のファイルになっているものです。
マスク画像は、メイン画像のファイル名の最後に _m のついたファイル名になります ( たとえば test.jpg に対して test_m.jpg )。マスク画像の明るさが不透明度になります。
メイン/マスク分離形式として有効な入力画像フォーマットは、それぞれ BMP, JPEG, PNG です。メインとマスクのフォーマットが異なっていてもかまいません (test.jpg に対して test_m.png など)。メインとマスクの画像の大きさは同じでなければなりません。
メイン画像に対応するマスク画像があれば、自動的にメイン/マスク分離形式として読み込みます。メイン画像とマスク画像の両方を変換対象に指定した場合、マスク画像は「メイン画像のマスクとして読む」ものとして変換対象から外されます。
Note: ERI 形式には対応していません。
出力画像フォーマット¶
出力画像フォーマットとしては以下の形式を用いることができます。
- 24bit/32bit BMP
24bit BMP はアルファチャンネルを持たない BMP です。
32bit BMP はアルファチャネルを持った BMP で、一つのファイル内に メインとマスクを持っている BMP です。
- PNG
フルカラーの PNG、あるいはアルファチャンネル付きの PNG です。
- TLG5
フルカラーの TLG5、あるいはアルファチャンネル付きの TLG5 です。拡張子は .tlg です。
- TLG6
フルカラーの TLG6、あるいはアルファチャンネル付きの TLG6 です。拡張子は .tlg です。
TLG6 画像についても TLG5 画像と同じく、タグ情報を書き出します。
- JPEG
不透明な画像の出力形式としてのみ選べます。圧縮クオリティ (1〜100、既定 90) を指定できます。
- メイン/マスク分離形式
透明部分のある画像において、メイン/マスクを別々のファイルに記録する方式です。それぞれ、BMP, JPEG, PNG を選択できます。JPEG の場合はメインとマスクそれぞれに圧縮クオリティ (既定 90) を指定できます。
マスク画像は、メイン画像のファイル名の最後に _m のついたファイル名になります ( たとえば test.jpg に対して test_m.jpg )。マスク画像はグレイスケールで書き出します。
メインとマスクを別々の画像形式にすることができますが、BMP と BMP 、PNG と PNG の組み合わせはほとんど意味がないので、上記の 32bit BMP か アルファチャネル付き PNG を選択した方が良いでしょう。
どちらか、あるいは両方に JPEG を用いればファイルサイズは節約できますが、画質は悪くなります。
メイン/マスク分離形式に TLG5 や TLG6 形式を指定することはできません。
TLG5 / TLG6 の書き出しは吉里吉里Z 本体のコードを移植したもので、同じ画像からは本体が出力するものと同じバイト列の TLG を出力します。
不透明な画像と透明部分のある画像¶
不透明な画像、透明部分を持った画像にそれぞれ別の形式を指定することができます。
ここで言う「不透明な画像」とは、画像全域が完全に不透明な画像(たとえば背景画像)を言います。「透明部分を持った画像」とは、透明になる部分がある画像(たとえば前景画像)を言います。
なお、画像形式として透過情報を持っている形式でも、結果的に画像のすべてのピクセルが完全不透明であれば、「不透明な画像」として扱われます。
既定では、不透明な画像・透明部分のある画像とも TLG5 で出力します。
透明部分のある画像のオプション¶
完全透明部分の色情報¶
画像の完全に透明な部分の処理を指定します。
通常、ltAlpha 形式の画像の場合、完全に透明な部分でも色の情報を持っています。その部分は完全に透明なので表示するときは単に無視されるのですが、画像の加工 ( JPEG等による圧縮も含む ) を行うときは無視されません。
この完全に透明な部分の処理の方式を指定します。
- 除去 (既定)
完全に透明な部分の色情報は除去されます ( 正確には真っ黒で塗りつぶされる )。
通常はこの指定でOKです。
- そのまま
処理を行いません。元の画像そのままになります。
完全透明部分にゴミがある場合、そのゴミまで圧縮することになるので圧縮率が悪くなります。
- 合成 (周囲の色で合成)
完全透明部分の色を、その周りにある不透明な部分の色から推測し、合成します。
画面では合成の強度を 1, 2, 3, 5, 8 pixel から選べます。ここでピクセル単位で指定された距離内にある不透明な部分のピクセルの色から、完全透明部分の色を合成します。値が大きいほど処理に時間がかかります。ここで指定した距離外にある完全透明な部分の色は除去されます。
たとえば JPEG でメイン画像を圧縮する場合、JPEG の特性上、急激な色の変化がある場所ではモスキートノイズが発生します。これは前景画像の場合、もし「合成」処理をおこなわず、完全透明部分と不透明部分の境界で急激な色の変化がある場合、その部分に発生しやすくなります。「合成」処理を行うと、完全透明部分の色を不透明部分の色から合成するため、色の変化の差を抑え、モスキートノイズの発生を抑えることができます。また、一般的な JPEG では 色の情報が隣のピクセルと混ざりますが、これも「合成」処理を行うことで、(合成しなかった場合の) 意図しない完全透明部分の色と不透明部分の色が混ざる事を抑えることができます。
通常は「除去」を選んでください。完全に透明な部分には色の情報は必要ありません。また除去を行えば画像の圧縮後のファイルサイズも小さくすることができます。
ltAddAlpha 形式で出力する場合はこのオプションは使われません。ltAddAlpha 形式での「完全透明」は、不透明度0、色は真っ黒以外にあり得ないからです。
入力を ltAddAlpha 形式とみなす¶
このオプションを指定すると、入力画像を ltAddAlpha 形式、つまり吉里吉里の Layer.type プロパティで ltAddAlpha を指定して表示するに適した、加算アルファ合成形式であると見なします。
このオプションを指定しないと、入力画像は ltAlpha 形式であると見なされます。ほとんどのグラフィックソフトの出力形式や PNG の仕様は ltAlpha 形式である為、通常はこのオプションは指定しないでください。
ただし、TLG 画像は自分の mode タグ (alpha / addalpha) に従います。
このオプションを指定すると、「ltAddAlpha 形式で出力する」も自動的に指定されます。また、「完全透明部分の色情報」のオプションは使われなくなります (アルファ情報も色情報も画像フォーマットコンバータでは加工されなくなります)。
ltAddAlpha 形式で出力する¶
このオプションを指定すると、出力画像を ltAddAlpha 形式で出力します。
入力が ltAlpha 形式の場合は、ltAlpha 形式から ltAddAlpha 形式への変換 (色に不透明度を掛ける) を行います。
このオプションを指定しないと、出力画像の形式は入力と同じ (通常は ltAlpha 形式) になります。
様々なグラフィックソフトや、PNG の仕様では ltAlpha 形式の画像のみを受け付けますので、出力画像を吉里吉里に使用する訳ではない場合は、通常は指定しないでください。
このオプションを指定すると、「完全透明部分の色情報」のオプションは使われなくなります(アルファ情報も色情報も画像フォーマットコンバータでは加工されなくなります)。
タグ情報¶
画像フォーマットコンバータは、TLG 画像や PNG 画像に「タグ情報」を書き出します。「タグ情報」は、画像がどのように表示されるべきかなどを含む情報です。このタグ情報は Layer.loadImages メソッドの戻り値として得ることができます。
以下のタグ情報が書き出されます。
- mode (TLG のみ)
画像の表示モードです。「不透明な画像」の場合は mode=opaque、「透明部分のある画像」の場合は mode=alpha、ltAddAlpha 形式で出力した場合は mode=addalpha という情報を書き出します。
「レイヤの書き出し」では、それぞれのレイヤのブレンドモードに対応する mode (psmul など) を書き出します。
吉里吉里は、TJS のグローバルオブジェクトに imageTagLayerType という辞書配列を持ち、TLG 画像の持つタグ情報の mode とレイヤのタイプがどう対応づけられるかを表しており、以下のように定義されています。
global.imageTagLayerType = %[
opaque :%[type:ltOpaque ],
rect :%[type:ltOpaque ],
alpha :%[type:ltAlpha ],
transparent :%[type:ltAlpha ],
addalpha :%[type:ltAddAlpha ],
add :%[type:ltAdditive ],
sub :%[type:ltSubtractive ],
mul :%[type:ltMultiplicative ],
dodge :%[type:ltDodge ],
darken :%[type:ltDarken ],
lighten :%[type:ltLighten ],
screen :%[type:ltScreen ],
psnormal :%[type:ltPsNormal ],
psadd :%[type:ltPsAdditive ],
pssub :%[type:ltPsSubtractive ],
psmul :%[type:ltPsMultiplicative ],
psscreen :%[type:ltPsScreen ],
psoverlay :%[type:ltPsOverlay ],
pshlight :%[type:ltPsHardLight ],
psslight :%[type:ltPsSoftLight ],
psdodge :%[type:ltPsColorDodge ],
psdodge5 :%[type:ltPsColorDodge5 ],
psburn :%[type:ltPsColorBurn ],
pslighten :%[type:ltPsLighten ],
psdarken :%[type:ltPsDarken ],
psdiff :%[type:ltPsDifference ],
psdiff5 :%[type:ltPsDifference5 ],
psexcl :%[type:ltPsExclusion ],
]
それぞれのレイヤのタイプについては Layer.type を参照してください。
- offs_x offs_y offs_unit (TLG, PNG)
これらは、変換元が PNG で、その PNG がその画像の左上隅からのオフセット (oFFs チャンク) の情報を含んでいる場合のみに出力されます。
offs_x は横位置の左端からの距離、offs_y は縦位置の上端からの距離です。offs_unit は pixel か micrometer のどちらかになり、距離の単位を示します。
- vpag_w vpag_h vpag_unit (TLG, PNG)
これらは、変換元が PNG で、その PNG が Virtual PAGe、つまり画像全体のサイズ (vpAg チャンク) の情報を含んでいる場合のみに出力されます。
この情報を PNG に出力するソフトウェアとして ImageMagick がありますが、この ImageMagick で trim (トリム) を行った際に、トリム前の画像サイズとしてこの情報が出力されます。ImageMagick が出力する caNv チャンクも読み込み、vpag_* と offs_* (単位は pixel) として扱います。
vpag_w は画像全体の横のサイズ、vpag_h は画像全体の縦のサイズ、vpag_unit は pixel か micrometer のどちらかになり、サイズの単位を示します。
- reso_x reso_y reso_unit (TLG, PNG)
これらは、変換元が PNG で、その PNG がその画像の解像度 (pHYs チャンク) の情報を含んでいる場合のみに出力されます。
reso_x は横方向の解像度、reso_y は縦方向の解像度です。reso_unit は meter になり、解像度の単位を示します。
TLG を入力にした場合は、その TLG が持っていたタグ情報を引き継ぎます。PNG に出力する場合、offs_* / vpag_* / reso_* はそれぞれ oFFs / vpAg / pHYs チャンクとして書き出します。mode などそれ以外のタグは PNG には書き出しません。
レイヤの書き出し¶
PSD / CLIP のレイヤを 1 枚ずつ画像ファイルとして書き出すことができます (現在はコマンドラインの layers コマンドのみ)。
- 出力先には、元のファイル名 (拡張子を除く) のフォルダが作られ、その中に「番号_レイヤ名.png」(番号は 000 から、下のレイヤから順) の名前で書き出します。形式は PNG (既定) / TLG5 / TLG6 から選べます。
- 各画像は、そのレイヤが占める矩形の大きさで書き出します。PSD はレイヤー効果込みで書き出します (はみ出す効果があれば矩形も広がります)。
- フォルダ (グループ)、調整レイヤ、画素の無いレイヤは書き出しません。非表示のレイヤ (親のフォルダが非表示のものも含む) は、指定したときだけ書き出します。
- 各画像には、文書上の位置を offs_x / offs_y (単位 pixel)、文書全体の大きさを vpag_w / vpag_h (単位 pixel) としてタグ情報に書きます。TLG には加えて、レイヤのブレンドモードに対応する mode タグを書きます。PSD の場合の対応は以下のとおりです (対応するものが無いブレンドモードでは mode タグを書きません)。CLIP は「通常」のレイヤのみ mode=alpha を書きます。
| PSD のブレンドモード | mode |
|---|---|
| 通常 | alpha |
| 覆い焼き(リニア) | psadd |
| 焼き込み(リニア) | pssub |
| 乗算 | psmul |
| スクリーン | psscreen |
| オーバーレイ | psoverlay |
| ハードライト | pshlight |
| ソフトライト | psslight |
| 覆い焼きカラー | psdodge |
| 焼き込みカラー | psburn |
| 比較(明) | pslighten |
| 比較(暗) | psdarken |
| 差の絶対値 | psdiff |
| 除外 | psexcl |
- 「完全透明部分の色情報」の指定 (既定は除去) は、レイヤの書き出しにも適用されます。
- 同じフォルダに、レイヤの一覧を
layers.jsonとして書き出します。
{
"source": "chara.psd",
"width": 32,
"height": 24,
"layers": [
{
"file": "000_red.png",
"name": "red",
"folder": "",
"index": 0,
"visible": true,
"left": 3,
"top": 2,
"width": 10,
"height": 8,
"opacity": 255,
"blend": "norm",
"mode": "alpha"
},
...
]
}
width / height は文書全体の大きさです。各レイヤの項目は次のとおりです。
| 項目 | 内容 |
|---|---|
| file | 書き出した画像のファイル名 |
| name | レイヤ名 |
| folder | 親フォルダの名前を / でつないだもの (最上位なら空) |
| index | 元のファイルでのレイヤ番号 |
| visible | 自分と親のフォルダがすべて表示になっているか |
| left / top | 文書上の位置 |
| width / height | 書き出した画像の大きさ |
| opacity | レイヤの不透明度 (0〜255) |
| blend | 元のブレンドモード (PSD は 4 文字のキー、CLIP は番号) |
| mode | 対応する吉里吉里の mode (無ければ空) |
画面での使い方¶
krkrimg を起動するとブラウザのウィンドウに画面が表示されます。起動時にファイルを引数に渡すと、それらのファイルを変換対象として開きます。
- 「ファイル」
「追加…」で変換するファイルを選びます (複数選べます)。「クリア」で一覧を空にします。
一覧には、各ファイルの形式、幅・高さ、透明部分の有無と、備考 (メイン/マスク分離形式のマスク画像、PSD / CLIP のレイヤ数、TLG の mode タグなど) が表示されます。他のファイルのマスク画像として読まれるファイルは、その旨が表示されます。
- 「不透明な画像」
不透明な画像の出力形式を TLG5 / TLG6 / PNG / BMP (24bit) / JPEG から選びます。JPEG の場合は品質も指定できます。
- 「透明部分のある画像」
透明部分のある画像の出力形式を TLG5 / TLG6 / PNG / BMP (32bit) / メイン/マスク分離 から選びます。メイン/マスク分離の場合は、メインとマスクの形式 (JPEG / PNG / BMP) と、JPEG の品質を指定できます。
あわせて、「完全透明部分の色」(除去 / そのまま / 周囲の色で合成 (1, 2, 3, 5, 8px))、「入力を ltAddAlpha 形式とみなす」、「ltAddAlpha 形式で出力する」を指定します。
- 「出力フォルダ」
空欄の場合は、入力ファイルと同じフォルダに出力します。フォルダを指定すると、そのフォルダに出力します。「参照…」でフォルダを選ぶこともできます。
相対パスを指定した場合は、入力ファイルのあるフォルダからの相対位置になります (旧版と同じ)。
「上書き」をチェックすると、同名のファイルがあった場合に上書きします。チェックしていない場合、同名のファイルがあるとそのファイルの変換はエラーになります。
- 「変換する」
変換を開始します。進行中は「中断」で中断できます。
変換終了後、各ファイルの変換が成功したか、エラーになったか (と出力したファイル名、出力した mode) が一覧で表示されますので確認してください。
Note: 出力先が入力ファイルと同じファイルになる場合 (TLG を同じフォルダに TLG で出力する場合など) はエラーになります。出力フォルダに別のフォルダを指定してください。
コマンドラインでの使い方¶
--cli を付けると、画面を開かずにコマンドラインで処理して終了します。
krkrimg --cli info <ファイル>...
krkrimg --cli convert <ファイル>... [オプション]
krkrimg --cli layers <PSD / CLIP>... [オプション]
- info
画像の形式、大きさ、透明部分の有無、PSD / CLIP のレイヤ数、メイン/マスク分離形式のマスク画像、タグ情報を表示します。 - convert
画像を変換します。画面での変換と同じ処理です。 - layers
PSD / CLIP のレイヤを書き出します (前述の「レイヤの書き出し」参照)。
値を取るオプションは --名前=値 の形で指定します。
| オプション | 内容 |
|---|---|
--opaque=FORMAT |
不透明な画像の形式 tlg5 / tlg6 / png / bmp / jpg (既定 tlg5) |
--alpha=FORMAT |
透明部分のある画像の形式 tlg5 / tlg6 / png / bmp / sep (既定 tlg5。sep はメイン/マスク分離形式) |
--sep-main=FORMAT |
分離形式のメインの形式 jpg / png / bmp (既定 jpg) |
--sep-mask=FORMAT |
分離形式のマスクの形式 jpg / png / bmp (既定 jpg) |
--quality=Q |
不透明な画像を JPEG にするときの品質 1〜100 (既定 90) |
--main-quality=Q |
分離形式のメインの JPEG 品質 (既定 90) |
--mask-quality=Q |
分離形式のマスクの JPEG 品質 (既定 90) |
--transparent=METHOD |
完全透明部分の色 remove (除去、既定) / keep (そのまま) / expand1〜expand8 (周囲 N ピクセルの色で合成) |
--input-addalpha |
入力を ltAddAlpha 形式とみなす (--addalpha も付きます) |
--addalpha |
ltAddAlpha 形式で出力する |
--format=FORMAT |
layers: 書き出す形式 png / tlg5 / tlg6 (既定 png) |
--hidden |
layers: 非表示のレイヤも書き出す |
--out=DIR |
出力フォルダ。省略すると入力ファイルと同じフォルダ |
--force |
出力先に同名のファイルがあれば上書きする |
--json |
結果を JSON で出力する |
--quiet |
進捗を表示しない |
Note: コマンドラインの
--outに相対パスを指定した場合は、カレントフォルダからの相対位置になります (ほかの標準ツールと同じ)。画面の「出力フォルダ」欄 (入力ファイルのフォルダから) とは基準が違うので注意してください。
たとえば、以下のように指定します。
# 背景は TLG5、立ち絵は TLG6 にして out フォルダへ
krkrimg --cli convert bg01.png chara01.png --opaque=tlg5 --alpha=tlg6 --out=out
# 透明部分のある画像をメイン JPEG + マスク PNG の分離形式に (周囲 3 ピクセルの色で合成)
krkrimg --cli convert chara01.png --alpha=sep --sep-main=jpg --sep-mask=png --transparent=expand3
# ltAddAlpha 形式の TLG5 を作る
krkrimg --cli convert effect.png --addalpha
# PSD のレイヤを TLG6 で書き出す (非表示のレイヤも含める)
krkrimg --cli layers chara.psd --format=tlg6 --hidden --out=layers
convert の結果は 1 ファイル 1 行で、「変換 (タブ) 入力 (タブ) → 出力 (タブ) (mode)」または「失敗 (タブ) 入力 (タブ) 理由」の形で表示されます。
終了コード¶
| 値 | 意味 |
|---|---|
| 0 | すべて成功 |
| 2 | 失敗したファイルがある (読み込めない、出力先が既にある、オプションの指定が正しくない など) |