Image 用于水印的Photoshop脚本?

Image 用于水印的Photoshop脚本?,image,scripting,photoshop,Image,Scripting,Photoshop,我不确定这是否是一个AppleScript的东西,或者它在实际语言中是否会更好(Photoshop录制动作很糟糕),但我想知道Photoshop中是否有一种方法可以: 拍照 将另一个图像粘贴到它上 从右下角开始,将图像向左移动X像素,向上移动Y像素 将不透明度更改为40% 将图像保存在旧图像上 通常堆栈溢出是关于提问和获得答案。更重要的是,如果你自己努力尝试解决这个问题;不是关于满足要求。但既然你指出,写下你的想法,而不是执行我为你写的关于基础知识的行动,那将是有益的。也许你可以把它捡起来,带

我不确定这是否是一个AppleScript的东西,或者它在实际语言中是否会更好(Photoshop录制动作很糟糕),但我想知道Photoshop中是否有一种方法可以:

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

通常堆栈溢出是关于提问和获得答案。更重要的是,如果你自己努力尝试解决这个问题;不是关于满足要求。但既然你指出,写下你的想法,而不是执行我为你写的关于基础知识的行动,那将是有益的。也许你可以把它捡起来,带着它跑

首先,有三种语言可以编写Photoshop脚本。它们是苹果脚本JavaScriptVisual 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 );
}