リンクをクリップボードにコピー
コピー完了
非プログラマです。
スクリプトを使った作業の自動化において、
クリップボードのテキストデータを取得したいです。
ブラウザでは、「e.clipboardData.getData」を用いれば取得できるのですが、
Photoshopではこの関数は未定義のようで不可能でした。
Photoshopでクリップボードのテキストを取得できる関数を
ご存じの方いらっしゃれば、ご教示頂きたいです。
補足
スクリプトの目的:
エクセルの表データをレイアウトするスクリプト
データの変数は3桁の任意の数×4のため、CSVや変数では直接入力の方が速いので代替不可
ScriptUIというのはPhotoshop搭載のJavaScript(ExtendScript)の標準機能でユーザーインターフェースを構成するためのライブラリです。少しコツが要りますが、そう難しいものでもありません。
今回の場合、一旦以下のようなUIにペーストしてスクリプトを実行すればUIの方からテキストを取得可能です。
var w = new Window("palette", "Test");
var tx = w.add("edittext", [0,0,250,100], "", {multiline:true});
var bt = w.add("button", undefined, "do");
var cl = w.add("button", undefined, "close");
bt.onClick = function() {
alert(tx.text);
}
cl.onClick = function() {
w.close();
}
w.show();
このコードでalertしている部分でテキストを抜き出していますので、これを変数に
...リンクをクリップボードにコピー
コピー完了
残念ながらExtendScriptでのクリップボードの操作は一筋縄では行かないのが常です。
Photoshopの場合、正攻法では対応できず、他のスクリプト言語やシェルスクリプト等を利用するなどの対策が必要になります。可用性の問題もありますので、ペースト用のUIをScriptUIやCEPで作るのが現実的な対応かと思います。
リンクをクリップボードにコピー
コピー完了
回答ありがとうございます。
ちょっと素人でこの先は難しいようですね。
今回のお話の中で出てきたものもまだ知識ゼロなので、
Java以外も勉強して出直します。
どうもありがとうございました。
リンクをクリップボードにコピー
コピー完了
ScriptUIというのはPhotoshop搭載のJavaScript(ExtendScript)の標準機能でユーザーインターフェースを構成するためのライブラリです。少しコツが要りますが、そう難しいものでもありません。
今回の場合、一旦以下のようなUIにペーストしてスクリプトを実行すればUIの方からテキストを取得可能です。
var w = new Window("palette", "Test");
var tx = w.add("edittext", [0,0,250,100], "", {multiline:true});
var bt = w.add("button", undefined, "do");
var cl = w.add("button", undefined, "close");
bt.onClick = function() {
alert(tx.text);
}
cl.onClick = function() {
w.close();
}
w.show();
このコードでalertしている部分でテキストを抜き出していますので、これを変数に入れて以下必要な処理を記述すればUIのボタンから処理可能となります。
リンクをクリップボードにコピー
コピー完了
解説やコードまで詳細な情報ありがとうございます。
さっそく試してみましたがうまくいかない点があります。
①教えていただいたコードをESTK上で実行
②新規テキストレイヤー挿入のコードをPhotoshop上で実行
の手順でやってみました。
最初の一回のみalert内のテキストが作成されましたが、
以降はそのテキストのみ(今回は「function」)が作成されます。
変数の設定の仕方が間違っていますでしょうか?
リンクをクリップボードにコピー
コピー完了
補足
①をPhotoshopで実行すると新規ウインドウが表示されない
①もPhotoshop上でアラートが出るようになると良いのでしょうか
そうすれば一つのスクリプトで実行できて助かるのですが
リンクをクリップボードにコピー
コピー完了
alertというのはExtendScriptのメソッドなので、その引数のtx.textを操作するのが正解です。
リンクをクリップボードにコピー
コピー完了
layObj.textItem.contents =○○○
この行でテキストレイヤーの中身を指定しているのですが、ここに続くのは何でしょうか?
素人なもので・・・
①はExtendScriptで実行
②はPhotoshopで実行 は合ってますか?
リンクをクリップボードにコピー
コピー完了
こんな感じでUIにペーストしたら指定layerの文字が変えられるかと…
var w = new Window("palette", "Test");
var tx = w.add("edittext", [0,0,250,100], "", {multiline:true});
var bt = w.add("button", undefined, "do");
var cl = w.add("button", undefined, "close");
bt.onClick = function() {
app.activeDocument.layers[0].textItem.contents = tx.text;
}
cl.onClick = function() {
w.close();
}
w.show();
リンクをクリップボードにコピー
コピー完了
度々申し訳ありません。
今しがた頂いた上記コードを私の環境で実行したところ、
ExtendScriptで実行した場合…do/closeのウィンドウが表示されてそこで終了します
Photoshopで実行…何も起きません
ExtendScriptで実行、Photoshopで実行というのは下の画像で選択する対象のことを言っています。
分かりにくかったらすみません。
リンクをクリップボードにコピー
コピー完了
補足
一番最初に頂いたアラートで抽出するコードは、ExtendScriptで実行した場合正常に動作しますが、
Photoshopで実行した場合何も起きないので、
①ExtendScriptでテキスト抽出を実行
②Photoshopでテキスト挿入の実行 の2工程でトライしています。
1発のコードで実行する場合、Photoshopを対象に実行すべきなのはわかるのですが、
Photoshopを対象にした場合にアラートのコードが動作しません
リンクをクリップボードにコピー
コピー完了
Photoshopでアラートを出すことは叶わなかったのですが、
別のアプローチで目的のスクリプトを作成できました。
scriptUIについて知ることができたので感謝しております。
どうもありがとうございました。