为 Photoshop 制作自动导出脚本

问题描述 投票:0回答:1

我正在尝试为 Photoshop 编写一个脚本,该脚本读取指定的文本文件以获取需要使其可见的图层以及它将导出为的文件名。然后它取消所有内容并移动到下一个条目。到目前为止我有-

// Create Trim function
function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}

// Turn on all groups in document
var doc = app.activeDocument;
var allGroups = doc.layerSets;
for (var i = 0; i < allGroups.length; i++) {
    allGroups[i].visible = true;
}   



// Open the input file and read each line
var inputFile = File.openDialog("Select input file");
inputFile.open("r");
var inputLines = inputFile.read().split("\n");
inputFile.close();

// Loop through each line in the input file
for (var k = 0; k < inputLines.length; k++) {
  var inputLine = trim(inputLines[k]);

  // Split the line into layer names and filename
  var inputs = inputLine.split("|");
  var layerNames = inputs[0].split(",");
  var filename = inputs[1];

  // Loop through all layers in the document
  for (var i = 0; i < app.activeDocument.layers.length; i++)
  {
    var layer = app.activeDocument.layers[i];

    var idx = get_index(layerNames, layer.name);

    // Toggle visibility for layers with matching names
    // if (namesArray.indexOf(layer.name) >= 0) 
    if (idx >= 0) 
    {
      layer.visible = !layer.visible;
    }
    
    function get_index(arr, str)
    {
      for (var i = 0; i < arr.length; i++)
      {
        if (arr[i] == str) return i;
      }
    }       
  }
         
  // Export the PNG file
  var pngFile = new File("filepath" + "/" + filename + ".png");
  var opts = new ExportOptionsSaveForWeb()
  opts.format = SaveDocumentType.PNG;
  opts.PNG8 = false;
  opts.colorProfileName = "ICC Profile Name";
  opts.quality = 100;
  app.activeDocument.exportDocument(pngFile, ExportType.SAVEFORWEB, opts);

    
  // Untoggle all layers and groups
  for (var i = app.activeDocument.layers.length - 1; i >= 0; i--) {
    var layer = app.activeDocument.layers[i];

    // If the layer is a group, loop through its layers
    if (layer.typename == "LayerSet") {
      for (var j = layer.layers.length - 1; j >= 0; j--) {
        var subLayer = layer.layers[j];

        // Turn off visibility for each layer inside the group
        subLayer.visible = false;
      }
    }

    // Turn off visibility for the layer itself
    layer.visible = false;
  }
}

但是,当我运行脚本时,它最终会导出空白的 png。我想知道如何修复此脚本并更改导出选项以更好地匹配 Photoshop 的“导出为”菜单中的选项,而不是“保存为 Web”菜单中的选项。

photoshop extendscript
1个回答
0
投票

我只是想重写剧本。现在它使用递归函数隐藏和取消隐藏层。我希望它能修复“空白 png”:

var inputFile = File.openDialog("Select input file");
inputFile.open("r");
var inputLines = inputFile.read().split("\n");
inputFile.close();

var filepath = inputFile.parent;

var opts     = new ExportOptionsSaveForWeb();
opts.format  = SaveDocumentType.PNG;
opts.PNG8    = false;
opts.quality = 100;
opts.colorProfileName = "ICC Profile Name";

for (var k = 0; k < inputLines.length; k++) {
    var inputLine  = inputLines[k].replace(/^\s+|\s+$/g, "");
    var inputs     = inputLine.split("|");
    var layerNames = inputs[0].split(",");
    var filename   = inputs[1];

    hide_all_layers();
    for (var i=0; i<layerNames.length; i++) unhide_layer(layerNames[i]);

    var pngFile = new File(filepath + "/" + filename + ".png");
    app.activeDocument.exportDocument(pngFile, ExportType.SAVEFORWEB, opts);
}


// ------------------------------------------------------------------

function hide_all_layers(item) {
    if (!item) item = app.activeDocument;
    var layers = item.layers;
    for (var i=0; i<layers.length; i++) {
        var layer = layers[i];
        layer.visible = false;
        if (layer.typename == "LayerSet") hide_all_layers(layer);
    }
}

function unhide_layer(name, item) {
    if (!item) item = app.activeDocument;
    var layers = item.layers;
    for (var i=0; i<layers.length; i++) {
        var layer = layers[i];
        if (layer.name == name) layer.visible = true;
        if (layer.typename == "LayerSet") {
            layer.visible = true;
            unhide_layer(name, layer);
        }
    }
}

至于“更改导出选项以更好地匹配 Photoshop 的“导出为”菜单中的选项”,我不确定您的确切意思。您需要一些额外的导出选项吗?

© www.soinside.com 2019 - 2024. All rights reserved.