終了

チャンネルの分割をファイルではなくレイヤーで分けたい

Community Beginner ,
Dec 07, 2022 Dec 07, 2022

リンクをクリップボードにコピー

コピー完了

チャンネルの分割をした時、ファイル別に分けられると思います。

それをレイヤーで分けたいのですが可能ですか?

 

チャンネルの分割後、一つのファイルに他のチャンネルのレイヤーをコピーしていけば出来るんですが、もう少し早く出来る方法があったら教えてもらいたいです。

 

よろしくお願いします。

 

Photoshop 23.3.2

MacOS Big sur 11.2

キーワード
macOS

表示

724

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 2 件の正解

Deleted User
Dec 07, 2022 Dec 07, 2022
素人ゆえにこれでいいのか分かりませんが、タグのないグレーにする、一部処理が抜けておりました。すみません。
処理前に必要なら画像を統合する処理と、一部コードを書き換えたものです。
コード自体はお好きにしていただいて構いませんが、思いついたところ修正しております。
 
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("docum
...

投票

翻訳

翻訳
Community Expert , Dec 08, 2022 Dec 08, 2022

スクリプト書く時間的余裕がないので、

その「演算」を利用したアクションをこしらえてみました。

2021で作成しましたがたぶんどれでも動きます。

https://www.dropbox.com/s/j64cmdw2lwtg1b4/20221208.atn?dl=0

 

「新規にチャンネル分割レイヤー」は背景レイヤーのあるRGBドキュメントで試してみてください。

じゅうぶん速いと思います。

 

「新規じゃなくチャンネル分割レイヤー」はRGBならどれでも大丈夫のはず。

こっちは「演算」使ってません。でもじゅうぶん速いかと思います。

親(グループなど)のないレイヤーを選択した状態で実行してください。

スクリーンショット 2022-12-08 17.37.23.png

投票

翻訳

翻訳
Community Beginner ,
Dec 07, 2022 Dec 07, 2022

リンクをクリップボードにコピー

コピー完了

var acDoc = app.activeDocument ;

doAction(チャンネル分割のアクション);

var channelFile = app.documents;
app.activeDocument = channelFile[channelFile.length-1];

for(i = channelFile.length - 1; i >= 1 ; i--){
    layer = app.activeDocument.layers;
    lastFile = channelFile.length - 2;
    for(k=0;k<layer.length;k++){
        layer[k].duplicate(channelFile[lastFile]);
    }
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}

 

スクリプトでやってみました。他にもうちょっと簡潔に出来る方法ないでしょうか

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
ゲスト
Dec 07, 2022 Dec 07, 2022

リンクをクリップボードにコピー

コピー完了

下記、上手く動くといいんですが、難しいことできないので原始的な方法です。
RGBモードとCMYKモードに対応してます。
大まかに ドキュメントを複製→チャンネルを分割→分割したレイヤーを元ドキュメントにコピー
一応動作は確認してますが、プロではないため.. 何かあれば言ってください。
ご自身でのコードの改変もOKです。
 
var doc = app.activeDocument;
var docName = doc.name;
var colorMode = doc.mode

 

if (colorMode === DocumentMode.RGB) {
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);

 

// 特定のドキュメントを選択し、レイヤーを元ドキュメントに複製、ドキュメントを閉じる
selectADocument('オリジナル_ブルー');
duplicateLayers('ブルー');
closeDoc();
selectADocument('オリジナル_グリーン');
duplicateLayers('グリーン');
closeDoc();
selectADocument('オリジナル_レッド');
duplicateLayers('レッド');
closeDoc();
activeDocument.artLayers[activeDocument.layers.length - 1].remove();
} else if (colorMode === DocumentMode.CMYK) {
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);

 

// 特定のドキュメントを選択し、レイヤーを元ドキュメントに複製、ドキュメントを閉じる
selectADocument('オリジナル_ブラック');
duplicateLayers('ブラック');
closeDoc();
selectADocument('オリジナル_イエロー');
duplicateLayers('イエロー');
closeDoc();
selectADocument('オリジナル_マゼンタ');
duplicateLayers('マゼンタ');
closeDoc();
selectADocument('オリジナル_シアン');
duplicateLayers('シアン');
closeDoc();
activeDocument.artLayers[activeDocument.layers.length - 1].remove();
}

 

// ドキュメントを複製
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"), "オリジナル");
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);
}

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
ゲスト
Dec 07, 2022 Dec 07, 2022

リンクをクリップボードにコピー

コピー完了

追記。

意図しない結果となるため、レイヤーは統合した状態で実行してください。

統合のコードをスクリプトに含めてもいいかもしれませんね。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
ゲスト
Dec 07, 2022 Dec 07, 2022

リンクをクリップボードにコピー

コピー完了

素人ゆえにこれでいいのか分かりませんが、タグのないグレーにする、一部処理が抜けておりました。すみません。
処理前に必要なら画像を統合する処理と、一部コードを書き換えたものです。
コード自体はお好きにしていただいて構いませんが、思いついたところ修正しております。
 
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("");
}

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Dec 08, 2022 Dec 08, 2022

リンクをクリップボードにコピー

コピー完了

忙しくてまだ試せてませんが、時間がある時に見させていただきます。

わざわざ作っていただいて本当にありがとうございます。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Dec 07, 2022 Dec 07, 2022

リンクをクリップボードにコピー

コピー完了

イメージ  >  演算 をいじってみてください。

チャンネル分割なしで任意のチャンネル情報をまるっと移せます。

スクリプトで実現するにはScriptingListenerを利用することになるのと、RGBとCMYKそれぞれのケースを用意しないといけない点だけやや面倒ですがお薦めします。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Dec 08, 2022 Dec 08, 2022

リンクをクリップボードにコピー

コピー完了

スクリプト書く時間的余裕がないので、

その「演算」を利用したアクションをこしらえてみました。

2021で作成しましたがたぶんどれでも動きます。

https://www.dropbox.com/s/j64cmdw2lwtg1b4/20221208.atn?dl=0

 

「新規にチャンネル分割レイヤー」は背景レイヤーのあるRGBドキュメントで試してみてください。

じゅうぶん速いと思います。

 

「新規じゃなくチャンネル分割レイヤー」はRGBならどれでも大丈夫のはず。

こっちは「演算」使ってません。でもじゅうぶん速いかと思います。

親(グループなど)のないレイヤーを選択した状態で実行してください。

スクリーンショット 2022-12-08 17.37.23.png

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Dec 08, 2022 Dec 08, 2022

リンクをクリップボードにコピー

コピー完了

最新

こんなやり方があるのですね、初めて知りました。

時間ある時にゆっくり試してみます。

本当に感謝です。勉強になりました。ありがとうございます。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines