-2

我正在努力加快我的工作流程。我有一张食物图片,需要以不同颜色的背景导出。

现在,当我导出 jpg 时,我正在一层一层隐藏彩色背景层。但我觉得必须有一种更快的方法来做到这一点?

任何帮助或提示将不胜感激。

4

1 回答 1

1

假设最底层是背景层,在上面你有三个彩色背景的图像。在那些之上是你的艺术。这只是识别哪些层是哪些层并首先将它们全部关闭然后再打开的情况。

var srcDoc = app.activeDocument;
var numOfLayers = srcDoc.layers.length;
var n = (numOfLayers - backgrounds.length)-1;

var backgrounds = ["Red", "Yellow", "Blue"];

// switch backgrounds OFF

for (var i = n; i < numOfLayers-1; i++)
{
  srcDoc.layers[i].visible = false;
}

// switch them ON one at at time
for (var i = n; i < numOfLayers-1; i++)
{
  srcDoc.layers[i].visible = true;

  // save
  var myFileName = "C:\\temp\\my_picture_" + i + ".jpg";
  save_as_jpg(myFileName);

  // Switch it off again
  srcDoc.layers[i].visible = false;
}


function save_as_jpg(afilepath)
{
   duplicate_it();

   // Flatten the jpg
   activeDocument.flatten();

   // jpg file options
   var jpgFile = new File(afilepath);
   jpgSaveOptions = new JPEGSaveOptions();
   jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
   jpgSaveOptions.embedColorProfile = true;
   jpgSaveOptions.matte = MatteType.NONE;
   jpgSaveOptions.quality = 12;

   activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);

   //close without saving
   app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}


function duplicate_it()
{
  // duplicate image into new document
  var str = "temp";

  var id428 = charIDToTypeID( "Dplc" );
  var desc92 = new ActionDescriptor();
  var id429 = charIDToTypeID( "null" );
  var ref27 = new ActionReference();
  var id430 = charIDToTypeID( "Dcmn" );
  var id431 = charIDToTypeID( "Ordn" );
  var id432 = charIDToTypeID( "Frst" );
  ref27.putEnumerated( id430, id431, id432 );
  desc92.putReference( id429, ref27 );
  var id433 = charIDToTypeID( "Nm  " );
  desc92.putString( id433, str ); // name
  executeAction( id428, desc92, DialogModes.NO );
}
于 2021-11-23T20:11:22.167 回答