1

さて、私はプログラミングに関してはかなり初心者ですが、作業の一部を実行するために簡単なスクリプトを実行することができました。

画面上で実際の画像と同じサイズになるように、1:1のスケールにサイズ変更する必要があるブレーキパッドの画像が1,500枚あります。各画像のサイズは(パッドの実際の幅* 2.834)である必要があることがわかりました。

私の現在のスクリプトは、ユーザーにブレーキパッドの幅の入力を求め、パッド画像のサイズをピクセル単位で割り当てますが、この例のように、各パッドは画像の周囲に異なるサイズの境界線を持つ異なる形状です。

私が必要としているのは、ユーザーがパッドの一方の側からもう一方の側に選択できるようにすることです。これにより、パッドの現在の幅(ピクセル単位)が返されます。次に、パッドの大きさをパッドの現在のサイズで割って、画像全体の倍率を見つけることができます。

4

1 に答える 1

1

より良い解決策:

scriptUI を使用して新しいウィンドウに画像をポップし、その画像にイベント リスナーをアタッチできますが、残念ながらドキュメント自体にはできません。コールバック関数内で X 座標を配列に追加します。配列の長さが 2 より大きい場合は、ウィンドウを非表示にしてプロセス関数を実行します。このように、最初のクリックで最初の点が設定され、2 回目のクリックで 2 番目の点が設定されます。3 回目のクリックで処理機能が実行されます。本当に凝ったものにしたい場合は、失敗した場合に右クリックを使用してすべてをリセットできますが、それはあなたに任せます.

#target photoshop

function processImage(image, partWidth) {
    // Your function to resize the image based on the part width
    alert(partWidth); // For testing purposes
}

// Save the current unit preferences (optional)
var startRulerUnits = app.preferences.rulerUnits
var startTypeUnits = app.preferences.typeUnits

// Set units to PIXELS
app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS

var doc = app.activeDocument; // or the next file in your file array if doing multiple
var clicks = [];
var width = 0;

var w = new Window("dialog", "The Image");
var img = w.add("image", undefined, File(doc.fullName));
img.addEventListener("click", function(k) {
                                if (clicks.length < 2) {
                                    clicks.push(k.clientX);
                                }
                                else {
                                    // absolute value so it doesn't matter if 
                                    // we click right or left side first
                                    width = Math.abs(clicks[0] - clicks[1]); 
                                    w.hide;
                                    processImage(doc, width);
                                }
                            });

w.show();

// Reset to previous unit prefs (optional)
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;

必要なのは、このPhotoshop スクリプトのようなものを使用して一連の画像をループ処理することです。フォルダー (ダイアログ ボックス) 内の画像のサイズを変更し、このコードをループに投入して、これをバッチとして実行します。

(画像が画面サイズよりも大きく、画像を縮小したり、スクロールバーを追加したりするのが非常に困難で、残念ながら scriptUI ではハッキリしている場合、問題が発生する可能性があります)

不自由な解決策:

これを行う 1 つの方法は、Rectangular Marquee Tool (正方形の選択ボックス) を使用してパーツの幅を選択することです。次に、選択範囲のディメンションにアクセスできます。選択の境界は、次の形式で配列に格納されます。[top-leftX, top-leftY, bottom-rightX, bottom-rightY]選択の幅を取得するには、2 番目の X 値から最初の X 値を引くことができます。

スニペットの例:

#target photoshop

var bounds = app.activeDocument.selection.bounds;
var selectionWidth = bounds[3] - bounds[0];

alert(selectionWidth);

これに対する唯一の注意点は、ユーザーがスクリプトを実行する前に選択を行う必要があることです。

scriptUI イベントリスナーを使用してこれを行う別の方法があるかもしれません。問題は、ウィンドウやパレットなどの scriptUI オブジェクトに適用する必要があることです。不透明度が 0 の大きなウィンドウを作成し、そのウィンドウにクリック イベントを追加して、マウスの座標をキャプチャすることができます。正直なところ、Java や C# などを使用して Photoshop の外で行う方が簡単です。

于 2012-12-11T19:45:56.040 に答える