素人ゆえにこれでいいのか分かりませんが、タグのないグレーにする、一部処理が抜けておりました。すみません。
処理前に必要なら画像を統合する処理と、一部コードを書き換えたものです。
コード自体はお好きにしていただいて構いませんが、思いついたところ修正しております。
var doc = app.activeDocument;
var docName = doc.name;
var colorMode = doc.mode
var uuid = generateUuid();
if (colorMode === DocumentMode.RGB) {
// 画像を統合
flattenImages();
// ドキュメントを複製
duplicateDocument();
// チャンネルを分割
var desc = new ActionDescriptor();
var list = new ActionList();
list.putInteger(1513);
list.putInteger(1516);
list.putInteger(1519);
desc.putList(stringIDToTypeID("documentIDs"), list);
executeAction(stringIDToTypeID("splitChannels"), desc, DialogModes.NO);
// 特定のドキュメントを選択し、レイヤーを元ドキュメントに複製、ドキュメントを閉じる
var rgbArray = ["ブルー", "グリーン", "レッド"];
for (var i = 0; i < rgbArray.length; i++) {
selectADocument(uuid + '_' + rgbArray[i]);
duplicateLayers(rgbArray[i]);
closeDoc();
}
doc.artLayers[doc.layers.length - 1].remove();
setGrayscaleMode();
} else if (colorMode === DocumentMode.CMYK) {
// 画像を統合
flattenImages();
// ドキュメントを複製
duplicateDocument();
// チャンネルを分割
var desc = new ActionDescriptor();
var list = new ActionList();
list.putInteger(1539);
list.putInteger(1542);
list.putInteger(1545);
list.putInteger(1548);
desc.putList(stringIDToTypeID("documentIDs"), list);
executeAction(stringIDToTypeID("splitChannels"), desc, DialogModes.NO);
// 特定のドキュメントを選択し、レイヤーを元ドキュメントに複製、ドキュメントを閉じる
var cmykArray = ["ブラック", "イエロー", "マゼンタ", "シアン"];
for (var i = 0; i < cmykArray.length; i++) {
selectADocument(uuid + '_' + cmykArray[i]);
duplicateLayers(cmykArray[i]);
closeDoc();
}
doc.artLayers[doc.layers.length - 1].remove();
setGrayscaleMode();
}
// ドキュメントを複製
function duplicateDocument() {
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(stringIDToTypeID("document"), stringIDToTypeID("ordinal"), stringIDToTypeID("first"));
desc.putReference(stringIDToTypeID("null"), ref);
desc.putString(stringIDToTypeID("name"), uuid);
desc.putInteger(stringIDToTypeID("documentID"), 1504);
executeAction(stringIDToTypeID("duplicate"), desc, DialogModes.NO);
}
// ドキュメントを選択
function selectADocument(aName) {
var n = documents.length;
var docList = [];
if (n !== 0) {
for (var i = 0; i < n; i++) {
var docName = documents[i].name;
docList.push(docName);
}
for (var j = 0; j < n; j++) {
if (docList[j] === aName) {
activeDocument = documents[j];
}
}
}
}
// レイヤーを複製
function duplicateLayers(colorName) {
var desc = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
desc.putReference(stringIDToTypeID("null"), ref1);
var ref2 = new ActionReference();
ref2.putName(stringIDToTypeID("document"), docName);
desc.putReference(stringIDToTypeID("to"), ref2);
desc.putInteger(stringIDToTypeID("destinationDocumentID"), 1500);
desc.putString(stringIDToTypeID("name"), colorName);
desc.putInteger(stringIDToTypeID("version"), 5);
executeAction(stringIDToTypeID("duplicate"), desc, DialogModes.NO);
}
// アクティブなドキュメントを保存せず閉じる
function closeDoc() {
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
// 画像を統合
function flattenImages() {
if (doc.artLayers.length > 1) {
doc.flatten();
} else if (doc.layers[0].isBackgroundLayer === false) {
doc.flatten();
}
}
// グレースケールモードに変更
function setGrayscaleMode() {
var desc = new ActionDescriptor();
desc.putClass(stringIDToTypeID("to"), stringIDToTypeID("grayscaleMode"));
desc.putBoolean(stringIDToTypeID("merge"), false);
desc.putBoolean(stringIDToTypeID("rasterize"), false);
executeAction(stringIDToTypeID("convertMode"), desc, DialogModes.NO);
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putEnumerated(stringIDToTypeID("document"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
desc.putReference(stringIDToTypeID("null"), ref);
desc.putBoolean(stringIDToTypeID("manage"), false);
executeAction(stringIDToTypeID("assignProfile"), desc, DialogModes.NO);
}
function generateUuid() {
// const FORMAT: string = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
var chars = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("");
for (var i = 0, len = chars.length; i < len; i++) {
switch (chars[i]) {
case "x":
chars[i] = Math.floor(Math.random() * 16).toString(16);
break;
case "y":
chars[i] = (Math.floor(Math.random() * 4) + 8).toString(16);
break;
}
}
return chars.join("");
}