Как исправить смещения слоев при экспорте всех групп Photoshop в .pngs в сценарии JavaScript? - PullRequest
0 голосов
/ 26 мая 2019

Когда я играю анимацию в фотошопе, она выглядит нормально.Каждый слой находится в правильном положении.Когда я запускаю свой скрипт, который сохраняет каждую группу в png, результаты имеют смещение нескольких слоев.

Я считаю, что у слоев есть странные проблемы с позициями в анимации.Изображение в слое может иметь другую позицию в одном кадре, а не в другом.Я полагаю, что мне нужно было бы заставить сценарий пошагово переместить кадр в анимации, чтобы получить правильную позицию, но я не уверен, как бы я это сделал.

var set;
var layer;
var count = 0;
for(var i = 0; i < app.activeDocument.layerSets.length; i ++)
{
    set = app.activeDocument.layerSets[i];
    set.visible = false;
    count ++;
}
for(var i = 0; i < app.activeDocument.layerSets.length; i ++)
{
    set = app.activeDocument.layerSets[i];
    set.visible = true;

    // save
    var fileName = set.name.replace(/[\\\*\/\?:"\|<> ]/g,'');
    if(fileName.length ==0) fileName = "autoname";
    var handle = File(app.activeDocument.path + "/" + fileName + ".png");
    pngSaveOptions = new PNGSaveOptions();
    activeDocument.saveAs(handle, pngSaveOptions, true, Extension.LOWERCASE);

    set.visible = false;
}

alert("Saved " + count + " images.");

Правильная анимация воспроизводится в фотошопе.,Полученные .pngs неверны.https://imgur.com/a/y9PLPUX

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Если ваша анимация уже находится на временной шкале Photoshop, может быть, проще просто отобразить анимацию во фреймы? Перейдите к File > Export > Render Video..., выберите Photoshop Image Sequence в качестве средства визуализации, PNG в качестве формата и в параметрах рендеринга не забудьте выбрать Straight Альфа-канал. Это сделает все кадры в PNG с прозрачностью.

0 голосов
/ 29 мая 2019

Разобрался.Этот скрипт имеет функцию, которая может перейти к другому кадру в анимации.Я использую его для рендеринга всех подгрупп анимации в свои отдельные .pngs

var set;
var layer;

for(var docI = 0; docI < app.documents.length; docI ++) {
    var doc = app.documents[docI];
    for (var frameIndex = 1; frameIndex <= 8; frameIndex++) {
        goToFrame(frameIndex);
        for (var i = 0; i < doc.layerSets.length; i++) {
            set = doc.layerSets[i];
            if (set.visible) {
                for (var setI = 0; setI < set.layerSets.length; setI++) {
                    var innerSet = set.layerSets[setI];
                    innerSet.visible = false;
                }
                for (var setI = 0; setI < set.layerSets.length; setI++) {
                    var innerSet = set.layerSets[setI];
                    innerSet.visible = true;
                    var fileName = innerSet.name.replace(/[\\\*\/\?:"\|<> ]/g, '');
                    if (fileName.length == 0) fileName = "autoname";
                    var handle = File(doc.path + "/output/" + doc.name.replace("player", fileName).replace(".psd", '') + (doc.layerSets.length - i) + ".png");
                    pngSaveOptions = new PNGSaveOptions();
                    activeDocument.saveAs(handle, pngSaveOptions, true, Extension.LOWERCASE);
                    innerSet.visible = false;
                }

            }
        }
    }
}

alert("Saved images.");

function goToFrame(index) {
    var jumpToFrameNumber = index; // counts from 1

    var desc = new ActionDescriptor();
    var ref1 = new ActionReference();
    ref1.putIndex( stringIDToTypeID( "animationFrameClass" ), jumpToFrameNumber );
    desc.putReference( charIDToTypeID( "null" ), ref1 );
    executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );
}
...