【问题标题】:Animated appearance of Photoshop layersPhotoshop 图层的动画外观
【发布时间】:2021-11-03 16:52:47
【问题描述】:

我正在处理一个包含超过 1,000 层(准确地说是 1052 层)的 Photoshop 文档。文件本身是一个拼贴画,每一层都是该拼贴画中的一个单独的图像。因此,当所有图层都可见时,它是 1052 个重叠图像的复杂拼贴画。我一直在尝试做的是创建拼贴组件的动画,例如,出现第 0 层,然后出现第 1 层、第 2 层等,当每个层出现时,前一层也保持可见强>。

我已经能够制作一个帧动画,然后我将所有其他图层添加为帧,但在这种情况下,我创建的动画只是让每个新帧/图层单独可见,并使前一层(s) 看不见的。我已经浏览了前几帧,手动保持前一层/帧可见,但我希望有一种方法可以更自动地做到这一点。

是否有我缺少的方法或设置可以让我自动创建此动画,在下一帧也变得可见时保持每一帧可见?

【问题讨论】:

  • 是的,可以编写一个脚本来自动化切换某些图层的过程,然后将其保存为图像,并遍历 psd。但是您尝试过什么?
  • 谢谢。我还没有尝试过编写脚本,但听起来我可能需要研究一下。我尝试在创建帧动画面板中更改一些设置,并尝试在创建帧动画时打开或关闭所有图层。

标签: animation photoshop layer


【解决方案1】:

基本上,想要你想要的前提是遍历所有层,在你去的时候打开和关闭可行性。或者在开始之前将它们全部关闭,然后让代码循环遍历所有层。同样,当您开始时,摆脱任何组,这会更容易。如果需要,请在没有它​​们的情况下制作 psd 的副本。

在 Photoshop 脚本中,最顶层是 0。下面的下一层是 1,依此类推。循环倒数更容易

for (var i = numOfLayers -1; i >= 0; i--)
{
    // do stuff here
}

每一层的可见性通过以下方式控制:

theLayer.visible = true; // visible
thatLayer.visible = false; // not visible

所以简而言之,你会有这样的东西:

// WITH ALL THE LAYERS VISIBILITY SWITCHED OFF TO START WITH!

// Switch off any dialog boxes
displayDialogs = DialogModes.NO; // OFF 

// call the source document
var srcDoc = app.activeDocument;

// get the number of layers in the PSD
var numOfLayers = srcDoc.layers.length;

var myFolder = "D:\\temp\\";


// main loop
// ignore background
for (var i = numOfLayers -2; i >= 0  ; i--)
{

    var docName = "image_" + i + ".jpg";

    // get a reference to the layers as you go up
    var thisLayer = srcDoc.layers[i];

    thisLayer.visible = true;

    // duplicate image into new document
    duplicate_it(docName);

    // active document is now the NEW one!

    // flatten it
    activeDocument.flatten();

    jpeg_it(myFolder + docName, 12);

    // close the image WITHOUT saving as we've just saved it
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);

    // make the source document the active document
    app.activeDocument = srcDoc;

    // switch OFF the layer
    thisLayer.visible = false;
}


// function DUPLICATE IT (str)
// --------------------------------------------------------
function duplicate_it(str)
{
  // duplicate image into new document
  if (arguments.length == 0) 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 );
}



// function JPEG IT (file path + file name, jpeg quality)
// ----------------------------------------------------------------
function jpeg_it(filePath, jpgQuality)
{

  if(! jpgQuality) jpgQuality = 12;

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

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

【讨论】:

  • 有趣。感谢您做出如此彻底的回应。据我了解,这个脚本的结果将是一系列单独的图像,然后可以组合成某种动画。我一直在寻找 PS 中的帧动画功能,但这似乎也实现了目标。我试试看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多