0

これが AppleScript の問題なのか、それとも実際の言語の方が優れているのか (Photoshop のレコード アクションはひどい) どうかはわかりませんが、Photoshop で次のことを行う方法があるかどうか疑問に思っていました。

  • 画像を撮る
  • その上に別の画像を貼り付けます
  • その画像を右下隅から開始し、その画像を左に X ピクセル、上に Y ピクセル移動します。
  • 不透明度を 40% に変更します
  • 古い画像の上に画像を保存する
4

1 に答える 1

0

通常、スタック オーバーフローとは、質問をして回答を得ることです。さらに、自分で問題を解決しようと努力した場合も同様です。要求を満たすことではありません。しかし、アクションを実行するよりもアイデアをスクリプト化する方が有益であると指摘したので、基本について書きました。多分あなたはそれを選んでそれで走ることができます。

まず、Photoshop のスクリプトを作成できる言語が 3 つあります。それらはApple-scriptJavaScript、およびVisual Basicです。VB は少数派ですが。JavaScript は最適な武器です。

透かしを移動して既存のファイルに上書き保存する JavaScript を次に示します。スクリプトによる貼り付けが少し難しいというわけではありません。直前に画像をカットまたはコピーしない限り、機能しない可能性があります。2 回貼り付けてもうまくいかないようなので、スクリプトを実行する直前に画像をコピーする必要があります。スクリプトを変更して、必要なファイルをロードし、それを他のドキュメントに配置することができます。

// call the source document
var srcDoc = app.activeDocument;

//get the image with and height
var w = srcDoc.width.value;
var h = srcDoc.height.value;

// paste into current document
app.activeDocument.paste();

// set the name
srcDoc.activeLayer.name = "watermark"

// set the distance the watermark needs to move
var offsetX = 40;
var offsetY = 20;

//call the function to offset the image
moveActiveLayer(w, h, offsetX, offsetY)

//set opacity
srcDoc.activeLayer.opacity = 40

//flatten the image
srcDoc.flatten();

//save the image
app.activeDocument.close(SaveOptions.SAVECHANGES)

// function MOVE ACTIVE LAYER (layer name, deltaX, deltaY)
// ----------------------------------------------------------------
function moveActiveLayer(imageWidth, imageHeight, dX, dY)
{
    var x = parseFloat(srcDoc.activeLayer.bounds[0])
    var y = parseFloat(srcDoc.activeLayer.bounds[1])
    var x1 = parseFloat(srcDoc.activeLayer.bounds[2])
    var y1 = parseFloat(srcDoc.activeLayer.bounds[3])

    var moveX = (imageWidth - x1) - dX;
    var moveY = (imageHeight- y1) - dY;

    // coords from bottom right

    // Transform layer
    // =======================================================
    var id442 = charIDToTypeID( "Trnf" );
    var desc93 = new ActionDescriptor();
    var id443 = charIDToTypeID( "null" );
    var ref64 = new ActionReference();
    var id444 = charIDToTypeID( "Lyr " );
    var id445 = charIDToTypeID( "Ordn" );
    var id446 = charIDToTypeID( "Trgt" );
    ref64.putEnumerated( id444, id445, id446 );
    desc93.putReference( id443, ref64 );
    var id447 = charIDToTypeID( "FTcs" );
    var id448 = charIDToTypeID( "QCSt" );
    var id449 = charIDToTypeID( "Qcsa" );
    desc93.putEnumerated( id447, id448, id449 );
    var id450 = charIDToTypeID( "Ofst" );
    var desc94 = new ActionDescriptor();
    var id451 = charIDToTypeID( "Hrzn" );
    var id452 = charIDToTypeID( "#Pxl" );
    desc94.putUnitDouble( id451, id452, moveX );
    var id453 = charIDToTypeID( "Vrtc" );
    var id454 = charIDToTypeID( "#Pxl" );
    desc94.putUnitDouble( id453, id454, moveY );
    var id455 = charIDToTypeID( "Ofst" );
    desc93.putObject( id450, id455, desc94 );
    executeAction( id442, desc93, DialogModes.NO );
}
于 2013-10-10T08:55:16.800 に答える