Photoshop操作以使每个组中的一个随机层可见组中、操作、Photoshop

2023-09-04 02:26:05 作者:忙着老去

我正在尝试使用Photoshop操作来生成由随机抽样的层组成的随机图像。我有3组默认情况下都不可见的层。

在每个组中,我想使1个随机层可见(总共将有3个"开"层) 将整个文件导出为.png文件。 重复n次

示例组/层:

[FRUITS]
* [Apples]
* [Oranges]
* [Pears]
* [Bananas]
* [Kiwis]

[VEGGIES]
* [Asparagus]
* [Cilantro]
* [Eggplant]

[MEATS]
* [Beef]
* [Pork]
如何用photoshop将人从图片中抠出来

默认情况下,所有层都是隐藏的,但当我播放某个动作时,可能会得到以下结果(可见层):

Image1: [Apples] [Eggplant] [Pork]
Image2: [Pears] [Asparagus] [Pork]
Image3: [Kiwis] [Cilantro] [Beef]

推荐答案

这是我的脚本,但在运行它之前不要忘记执行以下步骤:

隐藏除背景之外的所有层和组。 保存您的PSD。 关闭,然后重新打开。

现在您可以开始摇滚了。

功能

从您的群中创建您想要的无限模式。

将所有图案作为索引单独PNG保存在名为PNG的单独文件夹中。

观看GIF(如下)了解更多信息:

function Visible() {
  var Grps = app.activeDocument.layerSets; // loops through all groups
  for(var i = 0; i < Grps.length; i++){
    var tmp = app.activeDocument.layerSets[i].layers.length;
    app.activeDocument.layerSets[i].visible=true;
    var groupChildArr = app.activeDocument.layerSets[i].layers;
    var randLays = Math.floor(Math.random() * tmp);
    groupChildArr[randLays].visible = true;
    Save();
  }
  Revert();
}

function Save() {
  var outFolder = app.activeDocument; // psd name
  var outPath = outFolder.path;
  var fName = "PNG";   // define folder name
  var f = new Folder(outPath + "/" + fName);
  if ( ! f.exists ) {
    f.create()
  }
  var saveFile = new File(outPath + "/" + fName +"/" + "Pattern_" +  num + ".png");
  pngSaveOptions = new PNGSaveOptions();
  pngSaveOptions.interlaced = false;
  app.activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE);
}

// Original code - revert function does not work
// for some users
//function Revert(){
//  var idslct = charIDToTypeID( "slct" );
//  var desc300 = new ActionDescriptor();
//  var idnull = charIDToTypeID( "null" );
//  var ref163 = new ActionReference();
//  var idSnpS = charIDToTypeID( "SnpS" );
//  ref163.putName( idSnpS, "test.psd" );
//  desc300.putReference( idnull, ref163 );
//  executeAction( idslct, desc300, DialogModes.NO );
//}

function Revert(){
   var idRvrt = charIDToTypeID( "Rvrt" );
   executeAction( idRvrt, undefined, DialogModes.NO );
}

var count = prompt("How many patterns you want","");
for (var x=0 ; x<count;x++){
  var num = x+1;
  Visible();
}