代码之家  ›  专栏  ›  技术社区  ›  tipu

PS图象处理软件JavaScript脚本问题

  •  1
  • tipu  · 技术社区  · 16 年前

    下面的脚本几乎可以满足我的需要。我要做的是浏览打开的文档,其中139个,并将其保存为jpeg。但是它缺少的是从一个打开的文档移动到另一个,因此它保存了139次相同的图像。我假设 doc.close() 会关闭打开的文档并给出一个新的焦点,但是它没有。

    代码如下:

    var destination = "C:/Documents and Settings/Administrator/My Documents/small images"
    for(var i = 0; i < 5; i++)
    {
        doc = documents[i];
        name_ = doc.name.substring(0, doc.name.indexOf('.'))
        saveForWebPNG(destination, name_);
        doc.close();
    }
    
    function saveForWebPNG(outputFolderStr, filename)
    {
        var opts, file;
        opts = new ExportOptionsSaveForWeb();
        opts.format = SaveDocumentType.JPEG;
        opts.quality = 60;
        if (filename.length > 27) {
            file = new File(outputFolderStr + "/temp.jpg");
            activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
            file.rename(filename + ".jpg");
        }
        else {
            file = new File(outputFolderStr + "/" + filename + ".jpg");
            activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
        }
    }
    
    4 回复  |  直到 9 年前
        1
  •  2
  •   maerics    16 年前

    根据 Adobe Photoshop CS2 JavaScript Scripting Guide 看起来您需要分配给 Application.activeDocument 属性使该文档成为当前为任何操作选择的文档。这很有意义,因为您在 saveForWebPNG 函数,而不显式激活第一个块中迭代器中的文档。它可能与以下更改一样简单:

    for (var i = 0; i < 5; i++) {
      var doc = documents[i];
      app.activeDocument = doc; // Select that document.
      var name = doc.name.substring(0, doc.name.indexOf('.'))
      saveForWebPNG(destination, name);
      doc.close();
    }
    

    但是,我没有Photoshop的副本,也没有验证这个解决方案。

        2
  •  2
  •   jbiz    14 年前

    我知道这已经晚了很多,但我刚刚遇到这个问题,我觉得我可能有一个解决方案,有人可以使用。所以这里是。

    一种解决方案是调整for循环。假设有5个文档打开。app.documents.length将为5。当你关闭一个时,长度现在是4,然后是3,等等。我正在计算,因为app.documents.length在减少。当i=3时,app.documents.length=2。我认为向后迭代可以做到这一点。

    for (i = app.documents.length - 1; i >= 0; i--) { ... }
    
        3
  •  0
  •   snowjewel    13 年前

    + 1的JBIZ解决方案。我不知道为什么我的循环不会完成。

    for (i=app.documents.length-1; i >= 0; i--) {
      doc = app.documents[i];
      app.activeDocument = doc;
    
      ...
      do whatever you need, save & close
      ...
    }
    

    如果完成后关闭文档,那么每次迭代的app.documents.length都会变短。

        4
  •  0
  •   Ghoul Fool    9 年前

    要关闭当前选定的(或活动的)文档:

    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);