Комбинации и перестановки слоев Photoshop?

Этот большой

У меня есть документ Photoshop, в котором есть 8 слоев. Мне нужно создать способ использования этих 8 слоев и создания определенных комбинаций в зависимости от приведенных ниже правил...

Пример:

{1,2,3} {1,2,4} {1,2,5} {1,2,6} {1,2,7} {1,2,8} {1,3,4} { 1,3,5} {1,3,6} {1,3,7} {1,3,8} {1,4,5} {1,4,6} {1,4,7} {1 ,4,8} {1,5,6} {1,5,7} {1,5,8} {1,6,7} {1,6,8} {1,7,8} {2, 3,4} {2,3,5} {2,3,6} {2,3,7} {2,3,8} {2,4,5} {2,4,6} {2,4 ,7} {2,4,8} {2,5,6} {2,5,7} {2,5,8} {2,6,7} {2,6,8} {2,7, 8} {3,4,5} {3,4,6} {3,4,7} {3,4,8} {3,5,6} {3,5,7} {3,5,8} } {3,6,7} {3,6,8} {3,7,8} {4,5,6} {4,5,7} {4,5,8} {4,6,7} {4,6,8} {4,7,8} {5,6,7} {5,6,8} {5,7,8} {6,7,8}

Используя приведенную выше комбинацию, каждую комбинацию необходимо сохранить как изображение. ТАК, если вы возьмете одну из приведенных выше комбинаций, например, {3,6,8}. Photoshop должен использовать слои 3,6,8 для создания нового изображения или слоя, состоящего из этих трех сегментов.

Не уверен, как начать это. До сих пор я разработал все возможные комбинации, используя этот замечательный сайт:

http://www.mathsisfun.com/combinatorics/combinations-permutations-calculator.html

Ответы (4)

Я понятия не имел, что вы можете писать сценарии с помощью JavaScript в Photoshop до того, как прочитал ответ @horatio, поэтому я попробовал.

Если вы новичок в написании сценариев (сначала выполните несколько руководств, а затем) я рекомендую украсть как можно больше из одного из сценариев, поставляемых с Photoshop, я использовал ( Layer Comps To Files.jsxCS6), поэтому мне не нужно было искать, как сохранять файлы самостоятельно.

var a = 1; // number base layers
var p = 8; // number of layers used for permutations

var t = app.activeDocument.artLayers.length - 1; 

function hideAll() {
    for (var i = a; i < a+p; i++) {
        app.activeDocument.artLayers[t-i].visible = false;
    }
} 

for (var x = a; x < a+p; x++) {
    for (var y = x+1; y < a+p; y++) {
        for (var z = y+1; z < a+p; z++) {
            hideAll();
            app.activeDocument.artLayers[t-x].visible = true;
            app.activeDocument.artLayers[t-y].visible = true;
            app.activeDocument.artLayers[t-z].visible = true;
            saveFile( app.activeDocument, x+'-'+y+'-'+z, exportInfo);
        }
    }  
}

saveFile(...)Я украл из оригинального сценария, хотя я изменил его, чтобы сразу сохранить, чтобы .jpgизбежать запроса.
Мое использование переменной tдовольно запутанно, я предполагал, что 0-й слой будет базовым, но на самом деле это верхний слой и tкомпенсирует это.

Я попробовал это с 9-слойным изображением, 1 базовым слоем и затем 8 смайликами. В результате получается 56 перестановок примерно за 10 секунд:

результат


Я попытался придумать способ сделать это итеративно с помощью действий, но с 8 слоями вы должны записывать ручное создание почти половины перестановок (всего 21 из 56), и это включает удаление дубликатов в конце, по этой причине я не чувствую, что это особенно жизнеспособный вариант.

Если бы порядок слоев был важен, это сработало бы довольно хорошо, вы бы записали 1/8 работы, и дубликаты не создавались бы.

Вы бы записали, как создаете первые 21 перестановку, как показано ниже, сохраняя копию на каждом этапе, а затем, на последнем этапе, переместите последний слой в первую позицию (т. е. так, чтобы слой 8 стал слоем 1). Сохраните действие, затем запустите его еще несколько раз, и все перестановки будут сохранены.

Для 8 слоев получаются следующие перестановки:

перестановки

В последней строке буквы #s обозначают новые перестановки, все остальное дублируется. Таким образом, вы можете видеть, что каждый запуск действия имеет убывающую отдачу, и после 5 действий у вас есть все возможные перестановки.

Таким образом, если вы запустите его 5 раз, вы получите 126 результатов (56 из которых полезны).

Было бы лучше повторить действие 3 раза, удалить последние 9 созданных изображений, уменьшить количество дубликатов до 17, а затем произвести оставшиеся 4 перестановки вручную.

- Люблю лица ;)
Вау: o Я не очень разбираюсь в использовании сценариев фотошопа, поэтому я использую метод jdigioia, описанный ниже, создавая действие для каждой комбинации, поскольку у меня мало времени. Если вы хотите поделиться приведенным выше сценарием, это будет полезно. Но спасибо за ответ. Лица тоже нравятся.
@user3323371 user3323371 Нет проблем, я углубился во вторую часть только потому, что надеялся, что у меня будет момент озарения, когда я найду какой-нибудь супер быстрый и простой метод. Увы, я дочитал до конца и получился сложный бардак ;) Скрипт сейчас дома, позже скину ссылку в комментарии.
@user3323371 user3323371, можете найти полную копию скрипта на pastebin , вам нужно установить 3 переменные вверху.
Спасибо. Я пытаюсь использовать скрипт в CS6 и получаю сообщение об ошибке 1302: Нет такой строки элемента: 22 -> app.activeDocument.artLayers[ti].visible = false;. Как вы настроили PSD? Это были названия слоев RGB или CMYK и т. д.?
@user, вот моя палитра слоев, имена слоев не имеют значения! это RBG, но это не имеет значения. Ха, я только что погуглил ошибку, и твой ТАК вопрос стал самым популярным ;) Я вижу, у тебя 8 слоев. Если ни один из них не является фоновым слоем, вам нужно изменить значения в верхней части скрипта на var a = 0; var p = 8;(0 фоновых слоев, 8 слоев перестановки)
Большое спасибо. и, поскольку это главный хит, надеюсь, кто-то еще найдет это полезным. Еще один вопрос. Это работает, используя создание перестановок 3 слоев 56 перестановок. Как изменить значение 3 во всех других вариантах до использования 8 слоев. pastebin.com/raw.php?i=HjxK3j68
Хе-хе, подумал, что вы можете спросить об этом, вот версия , которая жестко закодирована для перестановки 4. Я соберу что-то, что может делать перестановки для любого числа в ближайшие несколько часов.
Спасибо всем, кто хочет сохранить в png вместо JPEG. Вы можете изменить последние 9 строк кода на: function saveFile( docRef, fileNameBody, exportInfo) { docRef.bitsPerChannel = BitsPerChannelType.EIGHT; var saveFile = новый файл (pathToSave + fileNameBody + ".png"); pngSaveOptions = новый PNGSaveOptions(); PNGSaveOptions.embedColorProfile = exportInfo.icc; pngSaveOptions.quality = exportInfo.pngQuality; docRef.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE); }
@user, pastebin.com/u0BSBNTv — установите nколичество слоев, которые вы хотите видеть. Я заменил ваш код сохранения png (и немного упростил код, но он работает одинаково). Имейте в виду, что вы на самом деле не устанавливали качество png раньше (вы устанавливали значение, которое не было создано), поэтому это было бы просто по умолчанию - если вы хотите установить его явно, вы можете раскомментировать 2-й последний строка в файле pngSaveOptions.quality = 70;(или 80, 90, 100 для лучшего качества и т.д..)
Фантастика :D Вы не понимаете, как я благодарен. Искренне. Спасибо.
@user, нет проблем, рад, что помогло

Команда javascript для скрытия/отображения слоя:

activeDocument.artLayers[i].visible = true;

Остальное академическое: настройте массив (или просто используйте свой комбинаторный алгоритм), повторите, переключите видимость, «сохраните как копию».

Итак, моя первая мысль - сохранить более 50 комбинаций, установив все остальные слои скрытыми, кроме слоев в текущей комбинации из 3 номеров, и просто сохранить для Интернета и устройств в виде изображения, но я думаю, что вы хотите сделать это повторяемый.

Если вы хотите сделать это в будущем с разными фотографиями, вы можете создать собственный экшен Photoshop для каждой комбинации, если это ваша конечная цель, чтобы иметь возможность делать это снова и снова с разными фотографиями в одних и тех же 8 слоях. По приведенной ниже ссылке вы узнаете, как создать и сохранить действие, а ниже приведены мои мысли о том, как сохранить каждую комбинацию из 3 в качестве пользовательского действия, чтобы вы могли заменить 8 фотографий по своему желанию и иметь возможность использовать все комбинации в будущее.

http://www.hongkiat.com/blog/photoshop-tutorial-1-click-photo-editing-with-action/

См. ссылку на настройку, но как только вы будете готовы, вы можете:

  • «Скрыть» все слои
  • Нажмите на запись о своем действии
  • «Показать» выбранные 3 изображения из 50+ комбинаций
  • Сохранить для Интернета и устройств . Сделайте это для каждой комбинации или для всех в одном действии, если хотите (!)
  • Завершить запись

В любом случае вам все равно придется либо настроить его вручную и сохранить фотографии, сохраняя каждую как действие, либо просто сделать это один раз и получить наборы изображений из тех же 8 фотографий.

Надеюсь, это хотя бы начало! Звучит как крутая идея наверняка.

Джо

В соответствии с ответом jdigioia создайте свое действие, показывая и скрывая слои, но после каждого экземпляра создайте композицию слоев .

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

Наконец, используйте File / Scripts / Layer Comps to Files для экспорта изображений.

Вероятно, было бы лучше сделать их в отдельных действиях . т.е. одно действие для всех возможностей на уровне 1,
затем продублируйте это действие и добавьте/переместите/дублируйте или удалите шаги, чтобы сделать все возможности на уровне 2 и т. д.