0

我不确定这是 AppleScript 的事情,还是用实际语言会更好(Photoshop 记录操作很糟糕),但我想知道 Photoshop 中是否有办法:

  • 拍照
  • 将另一个图像粘贴到它上面
  • 从右下角开始该图像并将该图像向左移动 X 像素并向上移动 Y 像素
  • 将不透明度更改为 40%
  • 将图像保存在旧图像上
4

1 回答 1

0

通常 Stack Overflow 是关于提出问题并获得答案的。此外,如果您已经努力自己尝试解决问题;不是为了满足要求。但是,既然您指出将您的想法编写成脚本而不是执行我为您编写的关于基础知识的操作将是有益的。也许你可以选择它并运行它。

首先,有三种语言可以编写 Photoshop 脚本。它们是Apple-scriptJavaScriptVisual Basic。虽然VB是极少数。JavaScript 是首选的武器。

这是一个 JavaScript,它将移动您的水印并保存在现有文件上。并不是说通过脚本粘贴可能有点棘手;因为除非您事先剪切或复制了图像,否则它可能无法正常工作。粘贴两次似乎不起作用,因此您必须在运行脚本之前复制图像。您可以更改脚本以加载您需要的文件并将其放在另一个文档中:

// 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 回答