2

Есть ли способ узнать количество слоев в .psd?

У меня есть .psds, которые ужасно замедляются. Есть 20-30 слоев и неизвестное количество слоев. 1000? 5,0000? Я не знаю.

Причина этого заключается в том, чтобы начать выяснять, в какой момент фотошоп начинает задыхаться. Если у меня есть фотошоп, использующий 90 доступной памяти, он быстро увеличивает 11 ГБ, замедляя мой блок для других целей, и если я оставляю его на 50% (7 ГБ), возникает пауза, когда я дублирую даже самый маленький слой (скажем, галочка, которая идет в флажок).

6 ответов6

5

Вы можете использовать пакет python psdtools для этого:

from __future__ import print_function
from psd_tools import PSDImage

psd = PSDImage.load('my_image.psd')
print("file has {} layers".format(len(psd.layers)))
1

Просто мысль: если вы на Mac, информация о файле Finder (cmd-i) может оказаться полезной, так как в ней перечислены все имена слоев, даже не открывая файл. Вы можете скопировать это в текстовый редактор с нумерацией строк и заменить все запятые на перевод строки. Нумерация строк показывает количество слоев (я не проверял, что происходит с запятыми в именах слоев).

РЕДАКТИРОВАТЬ:

Еще одно открытие: у Gimp есть информационная панель, которая показывает количество слоев для файла psd (Меню: Image > Image Properties)

gimp psd layercount

0

К сожалению, нет автоматической функции для подсчета слоя, но здесь вы можете использовать этот скрипт:

var totalProgress = 0// I assume this is defined eleswhere but is needed for the scriptler
function layerCounter(inObj)  // recursive function to count layers
{
    totalProgress+= inObj.artLayers.length;       
    for( var i = 0; i < inObj.layerSets.length; i++) {
        totalProgress++;
      layerCounter(inObj.layerSets[i]);  // recursive call to layerCounter
    }
   return totalProgress;
}

function getLayerCount(){
   function getNumberLayers(){
   var ref = new ActionReference();
   ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID("NmbL") )
   ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
   return executeActionGet(ref).getInteger(charIDToTypeID("NmbL"));
   }

   function getLayerType(idx) {
       var ref = new ActionReference();
       ref.putProperty( charIDToTypeID("Prpr") , stringIDToTypeID("layerSection"));
       ref.putIndex(charIDToTypeID( "Lyr " ), idx);
       return typeIDToStringID(executeActionGet(ref).getEnumerationValue(stringIDToTypeID('layerSection')));
   };
   var cnt = getNumberLayers();
   var res = cnt;
   if(activeDocument.layers[activeDocument.layers.length-1].isBackgroundLayer){
         var i = 0;
         //comment out line below to exclude background from count
         res++;
      }else{
         var i = 1;
      }; 
   for(i;i<cnt;i++){
      var temp = getLayerType(i);
      if(temp == "layerSectionEnd") res--;
      //if(temp == '"layerSectionStart") res--;//uncomment to count just artLayers
   };
   return res;
};

function main()
{
   var answer = confirm("Go through your file and count all the layers??");
   if(answer) {
      var reporter1 = layerCounter(app.activeDocument);
      alert("Kyletunney.com - All done! Layer count = " + reporter1);
   } else {
      reporter2 = getLayerCount();
      alert("Kyletunney.com - All done! Layer count = " + reporter2);

   }   
}

main();

Сохраните скрипт как .jsx

Как использовать скрипт?

  • Откройте Photoshop с файлом, который вы хотите считать
  • Нажмите на «Файл»
  • Тогда «Сценарии»
  • Теперь нажмите «Обзор»
  • Найдите только что сохраненный скрипт и нажмите «Загрузить»
  • Теперь вам будет предложено «Пройти через ваш файл и сосчитать все слои». Нажмите «Да»
  • Теперь вы будете проинформированы о количестве слоев в вашем файле!
0

Хорошо, это может показаться глупо простым (если у вас есть Photoshop), но самый простой способ - открыть документ в Photoshop и нажать кнопку "Новый слой" в нижней части панели слоев. Новый слой будет автоматически назван "Слой 450" или на один больше, чем количество слоев, находящихся в данный момент в документе.

0

Если вы используете Mac, запустите этот скрипт в редакторе скриптов:

tell application "Adobe Photoshop CC 2015.5"
    activate
    set theDOC to the current document
    tell theDOC
        set numberOfLayers to count of layers
        display dialog numberOfLayers as string
    end tell
end tell
0

Сделайте следующее:

  1. В строке состояния в левом нижнем углу окна редактирования щелкните стрелку вправо.

Редактирование окон с помощью строки состояния: стрелка вправо подсвечивается.

  1. В появившемся всплывающем меню выберите "Количество слоев".
  2. Прочитайте количество слоев в строке состояния.

Строка состояния гласит: 108 слоев, 18 групп

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .