dポイントプレゼントキャンペーン実施中!

PhotoShopで色域指定による範囲選択をJavaScriptで実行する方法について

いつも質問にお答え頂き有難うございます。

スクリプティング初心者です。
PhotoShopで色域指定による範囲選択をJavaScriptで実行する方法をレファレンスやネットで探していますがなかなか分かりません。

例えば、画像をPhotoshopに読み込んだ後に
「黒色(許容度20)の色域指定による範囲指定」
するスクリプトはどのようになるのでしょうか?

色域指定のアクションを作成してスクリプトに取り込むことはできるのですが、
自作のスクリプトで実行したいです。

JavaScriptに詳しい方、よろしくお願い致します。

A 回答 (3件)

> ScriptingListenerプラグインを使用しなければ実現できないケースなどを


> 説明した記載がレファレンス等にあれば教えて頂けると助かります。

そのものズバリは見たことがないです。すっきりしないとは思いますが、強いて挙げれば「JavaScript Scripting Reference」の
The Action Manager allows you to write scripts that target Adobe Photoshop CS2 functionality that is not otherwise accessible in the scripting interface, such as third party plug-ins and filters.
です。私は「JavaScript Scripting Reference」でメソッドが見つからないときに、ScriptingListener を使うことにしています。


>ScriptingListenerプラグインを使用しなくてもスクリプティングできる方法があると考えていました。

ScriptingListener を使いたくない気持ちが伝わってきます。私も ScriptingListener はできれば使いたくなかった。ScriptingListener が吐き出すコードは意味不明で汚い上、この部分だけ自分のコントロール外でした。そこで私は折衷案として event ID や key ID(例えば "ClrR")は、本来の名前(eventColorRange)を利用し
var eventColorRange = charIDToTypeID( "ClrR" );
のように清書し且つ function 化し、見通しを多少よくして折り合いを付けています。で、本来の名前をどのように調べてるかというと SDK のドキュメント「Adobe Photoshop 5.0 Actions Event Guide」からです。Adobe から最新の「Photoshop SDK」をダウンロードしてくればドキュメントに含まれているかも(未確認)。
    • good
    • 0
この回答へのお礼

ScriptingListenerを使用したコードは仰るとおりコントロール外で柔軟性がありません。

頂いた情報を参考にしてもう少し調べてみようと思います。
詳細にご回答頂き本当にありがとうございました。

お礼日時:2010/05/10 17:07

No.1 です。


間違えました。最初の2行入れ替えてください。
あと、ソースをコピー&ペーストしたとき "A " , "B " の4か所、それぞれABのあとが半角スペース3つ("A○○○")になるように調整してください
(自分のブラウザ環境だとスペースが一つになってしまいました)

ky=20;

selcol(0,0,0);

function selcol(cL,cA,cB)
{
cLAB = [cL ,cA ,cB];
var idClrR = charIDToTypeID( "ClrR" );
var desc2 = new ActionDescriptor();
var idFzns = charIDToTypeID( "Fzns" );
desc2.putInteger( idFzns, ky );
var idMnm = charIDToTypeID( "Mnm " );
var desc3 = new ActionDescriptor();
var idLmnc = charIDToTypeID( "Lmnc" );
desc3.putDouble( idLmnc, cLAB[0] );
var idA = charIDToTypeID( "A " ); //←スペース注意
desc3.putDouble( idA, cLAB[1] );
var idB = charIDToTypeID( "B " ); //←スペース注意
desc3.putDouble( idB, cLAB[2] );
var idLbCl = charIDToTypeID( "LbCl" );
desc2.putObject( idMnm, idLbCl, desc3 );
var idMxm = charIDToTypeID( "Mxm " );
var desc4 = new ActionDescriptor();
var idLmnc = charIDToTypeID( "Lmnc" );
desc4.putDouble( idLmnc, cLAB[0] );
var idA = charIDToTypeID( "A " ); //←スペース注意
desc4.putDouble( idA, cLAB[1] );
var idB = charIDToTypeID( "B " ); //←スペース注意
desc4.putDouble( idB, cLAB[2] );
var idLbCl = charIDToTypeID( "LbCl" );
desc2.putObject( idMxm, idLbCl, desc4 );
var idcolorModel = stringIDToTypeID( "colorModel" );
desc2.putInteger( idcolorModel, 0 );
executeAction( idClrR, desc2, DialogModes.NO );
}

この回答への補足

ご回答ありがとうございます。

>doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか?
説明が不正確で申し訳ありませんでした。
ScriptingListenerプラグインを使用してアクション管理したものです。

>いずれにしてもどちらかでしか方法はないと思います・・・
ScriptingListenerプラグインを使用しなくてもスクリプティングできる方法があると考えていました。
ScriptingListenerプラグインを使用しなければ実現できないケースなどを説明した記載がレファレンス等にあれば教えて頂けると助かります。

補足日時:2010/05/08 11:18
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2010/05/10 17:09

>色域指定のアクションを作成してスクリプトに取り込むことはできるのですが、




doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか?

いずれにしてもどちらかでしか方法はないと思います・・・
もしScriptingListenerプラグインでもよければこんな感じで(CS4でしか確認してませんが)




selcol(0,0,0); //指定色域(LAB)

ky=20; //許容量

function selcol(cL,cA,cB)
{
cLAB = [cL ,cA ,cB];
var idClrR = charIDToTypeID( "ClrR" );
var desc2 = new ActionDescriptor();
var idFzns = charIDToTypeID( "Fzns" );
desc2.putInteger( idFzns, ky );
var idMnm = charIDToTypeID( "Mnm " );
var desc3 = new ActionDescriptor();
var idLmnc = charIDToTypeID( "Lmnc" );
desc3.putDouble( idLmnc, cLAB[0] );
var idA = charIDToTypeID( "A " );
desc3.putDouble( idA, cLAB[1] );
var idB = charIDToTypeID( "B " );
desc3.putDouble( idB, cLAB[2] );
var idLbCl = charIDToTypeID( "LbCl" );
desc2.putObject( idMnm, idLbCl, desc3 );
var idMxm = charIDToTypeID( "Mxm " );
var desc4 = new ActionDescriptor();
var idLmnc = charIDToTypeID( "Lmnc" );
desc4.putDouble( idLmnc, cLAB[0] );
var idA = charIDToTypeID( "A " );
desc4.putDouble( idA, cLAB[1] );
var idB = charIDToTypeID( "B " );
desc4.putDouble( idB, cLAB[2] );
var idLbCl = charIDToTypeID( "LbCl" );
desc2.putObject( idMxm, idLbCl, desc4 );
var idcolorModel = stringIDToTypeID( "colorModel" );
desc2.putInteger( idcolorModel, 0 );
executeAction( idClrR, desc2, DialogModes.NO );
}

この回答への補足

>doActionのことを言ってるのでしょうか?それともScriptingListenerプラグインのことでしょうか?
説明が不正確で申し訳ありませんでした。
ScriptingListenerプラグインを使用してアクション管理したものです。

>いずれにしてもどちらかでしか方法はないと思います・・・
ScriptingListenerプラグインを使わないでもスクリプティングできる方法があると考えていました。こういうケースではScriptingListenerを使わなければ実現できない、といった記載がレファレンス等の資料にあれば教えて頂けますと助かります。

補足日時:2010/05/08 11:06
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
本回答の後に補足して頂いた方に返答します。

お礼日時:2010/05/08 10:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!