Как повторить градиент несколько раз в Illustrator и Photoshop?

12

Как повторить градиент 'n' раз, например, повторив градиент от черного к белому 5 раз (вдоль траектории обводки), как я делал вручную на приведенном ниже примере изображения.

Есть ли способ автоматизировать умножение на n раз, например, на 50 или 100, не копируя вручную ползунок градиента?

Градиент повторяется несколько раз вручную

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

Ответы:

7

Используйте сценарии!

Как уже отвечали другие, вы должны использовать сценарии. Но некоторые другие решения здесь используют только RGB, тогда как мои используют цвета, которые вы выбираете из своего документа. Также некоторые решения не производили даже цвета в точке обтекания или имели слишком много и / или перекрывающихся градиентных остановок, поэтому мой сценарий решает эти проблемы.

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

http://pastie.org/10924009

Изменить : сайт pastie не работает, поэтому я включил код ниже:

// select two paths, then run this script
if (app.activeDocument.selection.length < 2) {

    alert("Please select two or more paths with fills.");

} else {

    var cycles = Number(prompt ("Repeat the gradient how many times?")) || 5;  
    var myselection = app.activeDocument.selection;
    var colors = [];

    for (var i = 0; i < myselection.length; i++) {
        var newColor = myselection[i].fillColor;
        colors.push(newColor);
    }

    var stops = colors.length * cycles - 1; // “stops” does not include default 2 stops
    var interval = 100 / (cycles * colors.length); // ... the distance between stops

    var newGradient = app.activeDocument.gradients.add();  

    newGradient.type = GradientType.LINEAR;     // asymmetric, for 3 or more colours
    //newGradient.type = GradientType.RADIAL;   // symetric, for 3 or more colours

    //  the default 2 gradient stops (at beginning and end)
    //  should be the same colour, so that the gradient smoothly wraps around:
    newGradient.gradientStops[0].color = colors[0]; 
    newGradient.gradientStops[1].color = colors[0]; 

    // now add stops between beginning and end stops:
    for ( i = 1; i <= stops; i++ ) {

        var thisStop = newGradient.gradientStops.add();
        thisStop.rampPoint = i * interval;
        thisStop.color = colors[i % colors.length];

    }

    // to get a even result, the first and last rampPoints cannot be 0 and 100:
    newGradient.gradientStops[0].rampPoint = 0.1;
    newGradient.gradientStops[stops + 1].rampPoint = 99.9;
}

Пример 1: черно-белый, повторяется 6 раз, документ CMYK:

пример 1

Пример 2: 3 цветовых градиента, 6 повторов:

пример 2

Пример 3: RGB док, 6 цветов, 20 повторов. Обратите внимание, как заполненные пути перекрываются? Этот порядок наложения (спереди назад) определяет порядок цветов в градиенте.

пример 3

Изменение цветов в градиенте : выберите путь с примененным градиентом, затем выберите всплывающее меню «Панель образцов» → Добавить выбранные цвета. Новые глобальные образцы будут добавлены на панель образцов, и при редактировании они обновляются везде, где появляются.

пример 4

MG_
источник
Очень хорошо. Мне нравится тот факт, что вы получаете цвета из выбора. Не думал об этом.
PieBie
Потрясающие! Но ссылка на paste.org не работает. Пожалуйста, проверьте и обновите.
Вишну
1
@Vishnu: кажется, что весь сервер pastie не работает. Я предполагаю, что вам просто нужно немного терпения, пока оно не вернется снова.
PieBie
6

Вы можете достичь этого с помощью сценариев Illustrator. Проверка документации для CC15.3 в Справочном файле JavaScript в разделе «Градиенты» на странице 68.

Создайте цвета:

// Create the colors
var startColor = new RGBColor();  
startColor.red = 0;  
startColor.green = 100;  
startColor.blue = 255;  

var middleColor = new RGBColor();
middleColor.red = 252;  
middleColor.green = 238;  
middleColor.blue = 33;

var endColor = new RGBColor();  
endColor.red = 220;  
endColor.green = 0;  
endColor.blue = 100;  

Создайте градиент:

var newGradient = app.activeDocument.gradients.add();  
newGradient.name = "new_gradient_75097";  

Создайте линейный градиент:

newGradient.type = GradientType.LINEAR;  

или создайте радиальный градиент:

newGradient.type = GradientType.RADIAL; 

Где бы вы хотели построить несколько типов градиента, было бы в GradientStops:

// Modify the first gradient stop  
newGradient.gradientStops[0].rampPoint = 0  
newGradient.gradientStops[0].midPoint = 20;  
newGradient.gradientStops[0].color = startColor;  
// Modify the middle gradient stop  
newGradient.gradientStops.add();
// Modify the last gradient stop  
newGradient.gradientStops[1].rampPoint = 70;  
newGradient.gradientStops[1].midPoint = 80;  
newGradient.gradientStops[1].color = endColor;

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

Назовите количество раз:

var countgradient = Number(prompt ("Enter Gradient Count"));  

Создайте цикл и добавьте количество градиентов:

for ( i =0; i < countgradient; i++ ) {
    var origCount = newGradient.gradientStops.length;
    var lastStop = newGradient.gradientStops[origCount-1];

    var firstStop = newGradient.gradientStops.add();
    firstStop.rampPoint = lastStop.rampPoint;
    lastStop.rampPoint = lastStop.rampPoint - 1;
    firstStop.color = endColor;

    var secondStop = newGradient.gradientStops.add();
    secondStop.rampPoint = lastStop.rampPoint;
    lastStop.rampPoint = lastStop.rampPoint - 2;
    secondStop.color = startColor;
}

Код выше смесь того, что находится на странице 65-71 по ссылке вверху:

Пример с 1 разом:

введите описание изображения здесь

Пример с 5 разами:

введите описание изображения здесь

Вы можете изменить, lastStop.rampPoint - nчтобы настроить, где они приземляются. Надеюсь это поможет.

DᴀʀᴛʜVᴀᴅᴇʀ
источник
5

Это будет работать, только если вы используете градиент в качестве обводки (как в вашем вопросе). Если вы хотите повторять градиент бесконечно (в отличие от определенного числа повторений), то вы можете пропустить шаги 2 и 3 и использовать кисть с рисунком вместо художественной кисти. В CC теперь вы можете использовать изображения в кистях, чтобы вы могли растеризовать градиент вместо его расширения, но я использую CS6, поэтому я не могу это проверить.

  1. Установите один прямоугольник, заполненный градиентом, который вы хотите повторить.

введите описание изображения здесь

  1. Используйте эффект преобразования ( Effect → Distort & Transform → Transform ... ), чтобы дублировать прямоугольник. Установите горизонтальное перемещение на ширину вашего прямоугольника и установите столько копий, сколько вам нужно.

введите описание изображения здесь

  1. Разверните эффект преобразования ( Объект → Развернуть внешний вид ).

  2. Вы не можете использовать градиенты в кистях, поэтому вам нужно будет расширить градиент ( Объект → Развернуть ), выбрать количество объектов для расширения в разделе «Развернуть градиент до».

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

введите описание изображения здесь

  1. Перетащите расширенные градиенты на панель «Кисти» и выберите «Art Brush». Параметры кисти по умолчанию, скорее всего, будут в порядке, поэтому просто нажмите «ОК». Вы всегда можете вернуться и настроить параметры кисти позже.

  2. Примените свою новую кисть.

введите описание изображения здесь

Cai
источник
5

Основываясь на руководстве по Illustrator JS, я разработал приведенный ниже код. Этот код делает именно то, что вы хотите:

  • Создает градиент с двумя остановками цвета: черный и белый
  • Повторяет это пять раз
  • Применяет его как обводку к активному (выделенному) элементу

Более обобщенная версия может быть найдена ниже линии.

введите описание изображения здесь

(1) Сначала мы устанавливаем желаемое количество цветов и желаемое время, которое градиент должен повторять:

//Change these
var numberOfColors = 2; //Change this to the desired number of colors in the gradient
var iteration = 5; //Change this to the desired times you want to repeat the gradient

(2) Затем мы устанавливаем некоторые переменные, которые будут использоваться позже. GradientIntervalВычисляет процентное положение каждой потребности точка будет установлена на уровне. totalNumberofStopsдовольно понятно colorsМассив будет использоваться в дальнейшем.

//Don't change these
var i,j;
var gradientInterval = 100 / numberOfColors / iteration;
var totalNumberOfStops = numberOfColors * iteration;
var colors = [];

(3) Тогда мы можем определить наши цвета. Вам нужно ровно столько цветов, сколько указано в numberOfColorsначале. Недостающие цвета по умолчанию будут черными.

//Don't forget to push the colors to the colors array!

var color1 = new RGBColor();
color1.red = 0;
color1.green = 0;
color1.blue = 0;
colors.push(color1);

var color2 = new RGBColor();
color2.red = 255;
color2.green = 255;
color2.blue = 255;
colors.push(color2);

(4) Время создать наш градиент и дать ему имя. Теперь мы также можем установить тип.

//Let's initiate the gradient & name it
var newGradient = app.activeDocument.gradients.add();
newGradient.name = "new_gradient";

//Choose the gradient type here
//newGradient.type = GradientType.RADIAL; //Uncomment the one you need
newGradient.type = GradientType.LINEAR; //Uncomment the one you need

(5) Теперь по большей части. Сначала мы зациклимся, totalNumberOfStopsчтобы мы могли создать каждую остановку и добавить ее к градиенту. Мы создаем новую остановку и устанавливаем ее дальше, чем последняя. Теперь нам нужно получить правильный цвет из нашего массива цветов. Когда модуль индекса цикла, деленный на количество цветов, равен 0, мы знаем, что у нас есть каждый цвет, и нам нужно начать заново, поэтому мы сбрасываем наш индекс цвета.

Пример Скажем, у меня есть шесть цветов, которые я хочу сделать 5 раз. У нас тридцать остановок. Мы перебираем все цвета, используя j. Когда jстановится 6, больше нет цветов (шесть - седьмой цвет в массиве, но в массиве только шесть цветов). Таким образом, каждый кратный шести мы начинаем снова с 0. В противном случае мы просто перейдем к следующему цвету.

Теперь нам нужно только добавить окончательный цветовой стоп на 100%.

//Now here is where the magic starts
for(i=0;i<totalNumberOfStops;i++){
    var newStop = newGradient.gradientStops.add();
    newStop.rampPoint = i * gradientInterval;
    var modulus = i % numberOfColors;
    if(modulus === 0){
        j = 0;
    }else{
        j+=1;
    }
    newStop.color = colors[j];
}
var lastStop = newGradient.gradientStops.add();
lastStop.rampPoint = 100;
lastStop.color = colors[colors.length-1];

(6) Последний шаг: применение градиента к обводке. Выполнено. Партия!

//Apply gradient stroke to selected object
var colorOfGradient = new GradientColor();
colorOfGradient.gradient = newGradient;
var topPath = app.activeDocument.pathItems[0];
topPath.stroked = true;
topPath.strokeWidth = 140;
topPath.strokeColor =colorOfGradient;

(7) Возможно, вам придется вручную установить обводку «Применить градиент вдоль обводки», потому что я не нашел код для этого.

градиентный ход


Этот код был специально создан для вашего случая. Более общую версию можно найти здесь: http://pastie.org/10921740

Несколько примеров:

Градиент с двумя цветами, повторяя дважды: введите описание изображения здесь

Градиент с пятью цветами, повторяющийся 10 раз: введите описание изображения здесь

Градиент с двумя цветами, повторяющийся 50 раз: введите описание изображения здесь

Колоссальный градиент с 50 цветами, повторяющимися 50 раз: введите описание изображения здесь

PieBie
источник
Этот сценарий хорош, за исключением того, что есть две дополнительные градиентные остановки - одна в начале и одна в конце - которые не позволяют градиенту быть полностью плавным. Когда вы создаете градиент, по умолчанию есть две остановки.
MG_
Да Illustrator всегда добавляет остановку цвета на 100% при генерации из скрипта, даже если вы его не указали. Но если вы не укажете его, цвет будет черный. Мой обходной путь - добавить дополнительный цветовой стоп на 100% с помощью начального цвета. Это не просто, но это лучшее, что я могу придумать.
PieBie
О нет, теперь я вижу, ссылка на pastie - более старая версия, я обновлю.
PieBie
0

У меня была та же проблема, и ответ MG_ был именно тем, что мне было нужно!

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

var run = true;
if (app.activeDocument.selection.length < 2) {
    alert("Please select two or more paths with fills.");
} else {
    var dlg = new Window("dialog{text:'Create repeated gradient'}");

    dlg.location = [500,50];
    (dlg.alertBtnsPnl1 = dlg.add('panel', undefined, 'Color transition:')).helpTip = "Smooth or rough transition"; 
    (dlg.alertBtnsPnl1.selectS = dlg.alertBtnsPnl1.add('radiobutton', [15,15,95,35], 'Smooth' )).helpTip = "Smooth color transition"; 
    (dlg.alertBtnsPnl1.selectR = dlg.alertBtnsPnl1.add('radiobutton', [15,15,75,35], 'Rough' )).helpTip = "Sharp color transition"; 
    dlg.alertBtnsPnl1.orientation='row';
    dlg.alertBtnsPnl1.selectS.value = true;

    (dlg.alertBtnsPnl3 = dlg.add('panel', undefined, 'Gradient type:')).helpTip = "Linear or radial gradient"; 
    (dlg.alertBtnsPnl3.selectL = dlg.alertBtnsPnl3.add('radiobutton', [15,15,95,35], 'Linear' )).helpTip = "Linear gradient"; 
    (dlg.alertBtnsPnl3.selectR = dlg.alertBtnsPnl3.add('radiobutton', [15,15,75,35], 'Radial' )).helpTip = "Radial gradient"; 
    dlg.alertBtnsPnl3.orientation='row';
    dlg.alertBtnsPnl3.selectL.value = true;

    (dlg.alertBtnsPnl2 = dlg.add('panel', undefined, 'Gradient repeats:')).helpTip = "Gradient repeat count"; 
    (dlg.alertBtnsPnl2.slide = dlg.alertBtnsPnl2.add('slider', [25,15,165,39], 'Set repeat count for gradient:')).helpTip = "Use Slider to set a repeat count"; 
    dlg.alertBtnsPnl2.slide.value = 2; 
    (dlg.alertBtnsPnl2.titleEt = dlg.alertBtnsPnl2.add('edittext', [100,15,160,35], dlg.alertBtnsPnl2.slide.value)).helpTip = "Enter a repeat count value"; 
    dlg.alertBtnsPnl2.titleEt.text = Math.ceil(dlg.alertBtnsPnl2.slide.value); 
    dlg.alertBtnsPnl2.orientation='row';

    (dlg.alertBtnsPnl4 = dlg.add('panel', undefined, 'First and last colors:')).helpTip = "Define type of gradient loop";
    (dlg.sameStartAndEnd = dlg.alertBtnsPnl4.add('checkbox', [25,25,235,39], 'Start and end with same color')).helpTip="Use this for seamless gradient"; 
    dlg.sameStartAndEnd.value = true; 
    dlg.alertBtnsPnl4.orientation='column';

    dlg.btnPnl = dlg.add('group', undefined, 'Do It!'); 
    dlg.btnPnl.orientation='row';
    dlg.btnPnl.buildBtn1= dlg.btnPnl.add('button',[15,15,115,35], 'Cancel', {name:'cancel'}); 
    dlg.btnPnl.buildBtn2 = dlg.btnPnl.add('button', [125,15,225,35], 'OK', {name:'ok'}); 
    dlg.alertBtnsPnl2.slide.onChange= sliderChanged;
    dlg.alertBtnsPnl2.titleEt.onChanging = eTextChanged;
    dlg.btnPnl.buildBtn1.onClick= actionCanceled;
    dlg.show();

    if(run){
        var smooth = (dlg.alertBtnsPnl1.selectS.value) ? true : false;
        var cycles = dlg.alertBtnsPnl2.slide.value;
        var myselection = app.activeDocument.selection;
        var colors = [];

        for (var i = 0; i < myselection.length; i++) {
            var newColor = myselection[i].fillColor;
            colors.push(newColor);
        }

        var stops;
        var interval;
        if(dlg.sameStartAndEnd.value && !smooth){
            stops = colors.length * cycles - 2;
            interval = 100 / ((cycles * colors.length)+1);
        }else{
            if(smooth && !dlg.sameStartAndEnd.value){
                stops = colors.length * cycles - 2;
                interval = 100 / ((cycles * colors.length)-1);
            }else{
                stops = colors.length * cycles - 1;
                interval = 100 / (cycles * colors.length);
            }
        }

        var allStops = stops;
        var newGradient = app.activeDocument.gradients.add();  

        newGradient.type = (dlg.alertBtnsPnl3.selectL.value) ? GradientType.LINEAR : GradientType.RADIAL;

        newGradient.gradientStops[0].color = colors[0]; 
        if(dlg.sameStartAndEnd.value) newGradient.gradientStops[1].color = colors[0]; 
        else newGradient.gradientStops[1].color = colors[colors.length - 1]; 

        if(!smooth){
            var thisStop = newGradient.gradientStops.add();
            thisStop.rampPoint = interval-0.1;
            thisStop.color = colors[0];
            allStops++;
        }

        for(i = 1; i <= stops; i++){
            var thisStop = newGradient.gradientStops.add();
            thisStop.rampPoint = i * interval;
            thisStop.color = colors[i % colors.length];

            if(!smooth && i<(stops+1)){
                var thisStop = newGradient.gradientStops.add();
                thisStop.rampPoint = (i+1) * interval - 0.001;
                thisStop.color = colors[i % colors.length];
                allStops++;
            }
        }

        if(!smooth && dlg.sameStartAndEnd.value){
            var thisStop = newGradient.gradientStops.add();
            thisStop.rampPoint = 100 - (interval*2);
            thisStop.color = colors[colors.length-1];
            allStops++;
            var thisStop = newGradient.gradientStops.add();
            thisStop.rampPoint = 99.9 - interval;
            thisStop.color = colors[colors.length-1];
            allStops++;
            var thisStop = newGradient.gradientStops.add();
            thisStop.rampPoint = 100 - interval;
            thisStop.color = colors[0];
            allStops++;
        }

        newGradient.gradientStops[0].rampPoint = 0.1;
        if(dlg.sameStartAndEnd.value)newGradient.gradientStops[allStops + 1].rampPoint = 99.9;
    }
}

function actionCanceled() { 
    run = false;
    dlg.hide();
}

function sliderChanged() { 
    dlg.alertBtnsPnl2.slide.value = Math.ceil(dlg.alertBtnsPnl2.slide.value);
    dlg.alertBtnsPnl2.titleEt.text = Math.ceil(dlg.alertBtnsPnl2.slide.value);
}

function eTextChanged() { 
    dlg.alertBtnsPnl2.titleEt.text = Math.ceil(dlg.alertBtnsPnl2.titleEt.text);
    dlg.alertBtnsPnl2.slide.value = Math.ceil(dlg.alertBtnsPnl2.titleEt.text);
}

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

kaarto
источник
-3

Ну, я бы не использовал градиент полностью. Сначала создайте градиент, подобный тому, который у вас есть, затем заполните им холст и определите шаблон («Правка»> «Определить шаблон»). Затем вы идете в слой. Новый заливочный слой и выберите рисунок. Вы можете использовать существующий слой в качестве обтравочной маски. Теперь «n» - это «масштаб», поэтому 100% - это 1, 50% - это n = 2 и так далее. Чем меньше масштаб, тем больше повторяемость шаблона и градиента.

Второй подход, который я выбрал бы, это «шаг и повторение». Я не знаю, где и как вы хотите использовать этот многократный «волнистый» градиент, но «S & R» очень удобен для умножения вещей в фотошопе. Просто нажмите «ctrl (cmd) + alt + t» и сделайте свое дело (масштабируйте, переместите, поверните объект), нажмите Enter, а затем используйте «shift + ctrl (cmd) + alt + t», и Photoshop воспроизведет то, что вы сделали. Если вы вращаете, перемещаете и масштабируете объект, Ps будет делать это столько раз, сколько вы нажмете на ярлык повтора. введите описание изображения здесь

Здесь я просто играл со вторым по величине конвертом и затем повторил шаг.

SZCZERZO KŁY
источник