Этот большой
У меня есть документ 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
Я понятия не имел, что вы можете писать сценарии с помощью JavaScript в Photoshop до того, как прочитал ответ @horatio, поэтому я попробовал.
Если вы новичок в написании сценариев (сначала выполните несколько руководств, а затем) я рекомендую украсть как можно больше из одного из сценариев, поставляемых с Photoshop, я использовал ( Layer Comps To Files.jsx
CS6), поэтому мне не нужно было искать, как сохранять файлы самостоятельно.
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 перестановки вручную.
Команда 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/
См. ссылку на настройку, но как только вы будете готовы, вы можете:
В любом случае вам все равно придется либо настроить его вручную и сохранить фотографии, сохраняя каждую как действие, либо просто сделать это один раз и получить наборы изображений из тех же 8 фотографий.
Надеюсь, это хотя бы начало! Звучит как крутая идея наверняка.
Джо
В соответствии с ответом jdigioia создайте свое действие, показывая и скрывая слои, но после каждого экземпляра создайте композицию слоев .
Когда вы запускаете действие, у вас должна быть композиция слоев для каждого экземпляра.
Наконец, используйте File / Scripts / Layer Comps to Files для экспорта изображений.
Вероятно, было бы лучше сделать их в отдельных действиях . т.е. одно действие для всех возможностей на уровне 1,
затем продублируйте это действие и добавьте/переместите/дублируйте или удалите шаги, чтобы сделать все возможности на уровне 2 и т. д.
Рсиэль
ОГаза
пользователь3323371
ОГаза
ОГаза
пользователь3323371
ОГаза
var a = 0; var p = 8;
(0 фоновых слоев, 8 слоев перестановки)пользователь3323371
ОГаза
пользователь3323371
ОГаза
n
количество слоев, которые вы хотите видеть. Я заменил ваш код сохранения png (и немного упростил код, но он работает одинаково). Имейте в виду, что вы на самом деле не устанавливали качество png раньше (вы устанавливали значение, которое не было создано), поэтому это было бы просто по умолчанию - если вы хотите установить его явно, вы можете раскомментировать 2-й последний строка в файлеpngSaveOptions.quality = 70;
(или 80, 90, 100 для лучшего качества и т.д..)пользователь3323371
ОГаза