Image processing 将文件夹Photoshop脚本中的文件合并在一起(并排)

Image processing 将文件夹Photoshop脚本中的文件合并在一起(并排),image-processing,photoshop-script,Image Processing,Photoshop Script,我需要做以下事情。在设置了命名约定的文件夹中有多个png文件: 1.png 1_m.png、2.png 2_m.png(依此类推)。 png文件具有相同的宽度和高度(320 x 360 px) 现在脚本应该执行以下操作: 将文件1.png 1_m.png创建一个新文件,其中1_m.png放在左侧,1.png放在右侧,将这两个文件合并到一个图层上,并将其另存为1_done.png, 对文件夹中的所有文件运行此操作 这不一定是Photoshop脚本,我在网上搜索过,但找不到任何有用的解决方案。这里也

我需要做以下事情。在设置了命名约定的文件夹中有多个png文件: 1.png 1_m.png、2.png 2_m.png(依此类推)。 png文件具有相同的宽度和高度(320 x 360 px)

现在脚本应该执行以下操作:

将文件1.png 1_m.png创建一个新文件,其中1_m.png放在左侧,1.png放在右侧,将这两个文件合并到一个图层上,并将其另存为1_done.png, 对文件夹中的所有文件运行此操作

这不一定是Photoshop脚本,我在网上搜索过,但找不到任何有用的解决方案。这里也没有什么是一成不变的,文件可以放在不同的文件夹中,这是最简单的解决方案。
我的Photoshop版本是CS5

此脚本将执行您想要的操作。将所有文件放在一个目录中,然后使用Automatic batch->script运行脚本。它会在文件名中找到一个没有和下划线的图像,然后打开它的配对名称文件(带“_m”),将它们并排放置,并在文件名中添加_done将其保存

//预处理像素 app.preferences.rulerUnits=单位.PIXELS

var srcDoc = app.activeDocument;

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

// set original width and height
var imageW = srcDoc.width.value;
var imageH = srcDoc.height.value;

// get the info out of the source doc
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.length -4);
var filePath = srcDoc.path.toString();
var fileExt = fileName.substring(fileName.length -4, fileName.length);

var nameCheck = fileName.substring(0,fileName.indexOf("_"));

if (nameCheck <1)
{
   // no underscore so we need to open it's namesake
   // alert(nameCheck)
   var filePair = filePath + "/" + docName + "_m" + fileExt;
   openThisFile(filePair)
   activeDocument.selection.selectAll()
   activeDocument.selection.copy();
   app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
   app.activeDocument = srcDoc;
   activeDocument.resizeCanvas(imageW *2, imageH, AnchorPosition.MIDDLELEFT);
   selectRect(0, imageW, imageW*2, imageH)
   activeDocument.paste()
   activeDocument.flatten();
   var newName = filePath + "/" + docName + "_done" + fileExt
   saveMe(newName)
}
    else
    {
      app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    }


function openThisFile(masterFileNameAndPath)
{
 var fileRef = new File(masterFileNameAndPath)
 if (fileRef.exists)
 //open that doc
 {
    app.open(fileRef);
 }
 else
 {
    alert("error opening " + masterFileNameAndPath)
 }
}


function selectRect(top, left, right, bottom)
{
    srcDoc.selection.deselect()
    // =======================================================
    var id1 = charIDToTypeID( "setd" );
    var desc1 = new ActionDescriptor();
    var id2 = charIDToTypeID( "null" );
    var ref1 = new ActionReference();
    var id3 = charIDToTypeID( "Chnl" );
    var id4 = charIDToTypeID( "fsel" );
    ref1.putProperty( id3, id4 );
    desc1.putReference( id2, ref1 );
    var id5 = charIDToTypeID( "T   " );
    var desc2 = new ActionDescriptor();
    var id6 = charIDToTypeID( "Top " );
    var id7 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id6, id7, top );
    var id8 = charIDToTypeID( "Left" );
    var id9 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id8, id9, left );
    var id10 = charIDToTypeID( "Btom" );
    var id11 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id10, id11, bottom );
    var id12 = charIDToTypeID( "Rght" );
    var id13 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id12, id13, right );
    var id16 = charIDToTypeID( "Rctn" );
    desc1.putObject( id5, id16, desc2 );
    executeAction( id1, desc1, DialogModes.NO );
}

function saveMe(fPath)
{

// save out the image
var pngFile = new File(fPath);
pngSaveOptions = new PNGSaveOptions();
pngSaveOptions.embedColorProfile = true;
pngSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
pngSaveOptions.matte = MatteType.NONE; pngSaveOptions.quality = 1;
activeDocument.saveAs(pngFile, pngSaveOptions, false, Extension.LOWERCASE);

// close that saved png
 app.activeDocument.close()
}
var srcDoc=app.activeDocument;
//调用当前文档
var srcDoc=app.activeDocument;
//设置原始宽度和高度
var imageW=srcDoc.width.value;
var imageH=srcDoc.height.value;
//从源文档中获取信息
var fileName=srcDoc.name;
var docName=fileName.substring(0,fileName.length-4);
var filePath=srcDoc.path.toString();
var fileExt=fileName.substring(fileName.length-4,fileName.length);
var nameCheck=fileName.substring(0,fileName.indexOf(“”);

如果(nameCheck我会用ImageMagick来做这件事,它在Windows、OSX和Linux上都是免费的——事实上,大多数Linux发行版上都安装了它

其关键是使用ImageMagick的
convert
命令并排附加两个图像,基本上如下所示:

convert left.png right.png +append out.png
因此,脚本如下所示(几乎一半是注释):

如果我们从这样的图像开始:

convert left.png right.png +append out.png

它将为所有对生成以下内容:


感谢脚本。它工作得非常完美。我只是找不到batch->script命令。它是否仅在Photoshop的扩展版本中?首先将脚本记录为操作。操作-->新操作(给它一个名称),录制,然后停止录制-这通常很重要。然后从批处理文件中调用脚本。我不确定CS5-但肯定在CS2下,您会在文件-->自动-->批处理下找到它,然后选择它所在的文件夹。单击“确定”运行它。我正在尝试使用此脚本,但使用jpg图像。我已将pngSaveOptions更改为jpg并重新设置移动了.matte,但当我尝试运行它时,它会将我的图像放置在右侧,只是一个空白矩形。我的文件位于同一文件夹中,一个是line name.jpg,另一个是name_m.jpg。有人能帮我确定我做错了什么吗?谢谢,我找到了问题……不知何故,activeDocument.flatte()导致图像“重新对齐”…我刚刚注释掉了这一行,现在一切都很好!谢谢你的精彩脚本!我正在使用Photoshop CS 3 Extended。找不到选项batch->script commands。你能告诉我你使用的是哪个版本吗。