将图像放入当前打开的photoshop文档(applescript)

时间:2014-10-03 13:50:42

标签: javascript applescript photoshop extendscript

我需要将一些图像分组到一个photoshop文件中,并尝试寻找更优化的路径。我知道我可以使用applescript来做这样的事情。

tell application id "com.adobe.Photoshop"
  activate
  open file (CurrentImg)
  duplicate layer 1 of current document to end of NewDocRef
end tell
-- CurrentImg is some file path and NewDocRef is a path to some other open document

我可以使用open打开每个图像一次打开并将其移动到一个文档中。我的问题是,是否有人有更好的方法将图像直接放入打开的文档中。寻找只是拖动图像的效果。我愿意使用javascript函数来完成它。 (我不知道javascript,但我可以设法理解我读到的内容。)

2 个答案:

答案 0 :(得分:2)

我是用ExtendScript编写的。 在Osx Photoshop 2014 CC上测试

// based on this stackoverflow
// http://stackoverflow.com/a/2780624/1770432

var main = function(arguments, body) {
  if (app.documents.length < 1) {
    // abort no file to place imports in
    return;
  }
  // filter does not work on OSX
  var files = File.openDialog("Select your files to place", "*.*", true);
  if (files.length < 1 || files === null) {
    // abort
    // nothing selected or canceld
    return;
  } else {
    // got something
    var doc = app.activeDocument;
    // loop all files
    for (var i = 0; i < files.length; i++) {
      // we use a try catch to sort out files Photoshop cant handle
      try {
        var curr_file = app.open(files[i]); // one of them
        curr_file.selection.selectAll();
        curr_file.selection.copy();
        curr_file.close(SaveOptions.DONOTSAVECHANGES);
        doc.paste();
      } catch (e) {
        // need to skip files Photoshop can't open
        // could also be done via a file filter
        continue;
      }

    }

  }
}

main();

答案 1 :(得分:0)

我一直在寻找同样的事情。打开所有文件,选择并复制粘贴内容对最终用户来说并不是一个非常好的视觉体验。

使用Photoshop Scriptlistener plugin,您可以听取操作并在javascript中为您编写。然后,您可以根据自己的需要重播或修改它们。

这是(第一行除外)是我用听众捕获的内容。它会要求您输入文件并将其放在当前打开的文档中。您可以使用此处提供的代码@fabiantheblind轻松地根据您的情况对其进行修改。

var sourceFile= File.openDialog('pick an image');
var idPlc = charIDToTypeID( "Plc " );
var desc3 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
desc3.putPath( idnull, sourceFile);
var idFTcs = charIDToTypeID( "FTcs" );
var idQCSt = charIDToTypeID( "QCSt" );
var idQcsa = charIDToTypeID( "Qcsa" );
desc3.putEnumerated( idFTcs, idQCSt, idQcsa );
executeAction( idPlc, desc3, DialogModes.NO );

您可以将其粘贴到extendscript工具包中,看看它是否有效。我有它在CC工作,没有测试它为cc2014