Як повторити градієнт кілька разів у Illustrator та Photoshop?


12

Як повторити градієнт 'n' разів, наприклад, повторюючи градієнт чорно-білого кольору 5 разів (по шляху обведення), як я це робив вручну, нижче на прикладі зображення.

Чи є спосіб автоматизувати його для множення «n» разів, наприклад 50 або 100, без копіювання повзунка градієнта вручну?

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


Вішну, ти щойно намагався перетворити його на дію та записати його, щоб робити те саме, що часто, як хочеш. Без суєти немає мюс.
Шон

Відповіді:


7

Використовуйте сценарій!

Як відповіли інші, слід використовувати сценарій. Але в деяких інших рішеннях тут використовується лише RGB, тоді як моє використовує кольори, які ви вибираєте в документі. Також деякі рішення не давали рівного кольору в точці обгортання або мали занадто багато та / або перекриття градієнта, тому мій сценарій вирішує ці проблеми.

Щоб скористатися нею, виберіть 2 або більше контурів, заповнених кольорами, призначеними для градієнта, а тоді, коли буде запропоновано, введіть кількість разів, щоб повторити градієнт.

http://pastie.org/10924009

Редагувати : веб-сайт пасти не працює, тому я включив код нижче:

// 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


Дуже хороша. Мені подобається те, що ви отримуєте кольори з вибору. Не думав про це.
PieBie

Дивовижно! Але посилання paste.org не працює. Перевірте та оновіть.
vishnu

1
@Vishnu: схоже, весь сервіс пасти працює. Я здогадуюсь, що вам просто знадобиться терпіння, поки воно не повернеться знову.
PieBie

6

Цього можна досягти за допомогою сценарію Illustrator. Перевірка документації на CC15.3 в Довідковому PDF- файлі JavaScript під «Градієнти» на стор.

Створіть кольори:

// 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щоб налаштувати, де вони приземляються. Сподіваюсь, це допомагає.


5

Це буде працювати лише в тому випадку, якщо ви використовуєте градієнт як штрих (як у вашому запитанні). Якщо ви хочете нескінченно повторювати градієнт (на відміну від певної кількості повторів), ви можете пропустити кроки 2 і 3 і використовувати пензлик з малюнком замість художньої кисті. Тепер у CC ви можете використовувати зображення в пензлях, щоб ви могли розсіяти градієнт замість того, щоб розширювати його, але я використовую CS6, тому я не можу це перевірити.

  1. Налаштуйте один прямокутник, заповнений градієнтом, який ви хочете повторити.

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

  1. Використовуйте ефект перетворення ( Ефект → Спотворити і Перетворити → Перетворити ... ) для дублювання прямокутника. Встановіть горизонтальний хід на ширину прямокутника і встановіть стільки копій, скільки вам потрібно.

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

  1. Розгорніть ефект перетворення ( Об'єкт → Розгорнути зовнішній вигляд ).

  2. Ви не можете використовувати градієнти в кистях, тому вам потрібно буде розширити градієнт ( Об'єкт → Розгорнути ), виберіть ряд об’єктів, на який слід розгорнути розділ "Розгорнути градієнт на".

    Розширення градієнта залишить вас із відсікаючими масками у розширеному градієнті, вам потрібно буде пройти шари та видалити їх (або продовжувати клацання правою кнопкою миші та "Розгрупувати", потім "Відпустити відсічну маску", поки не буде більше масок).

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

  1. Перетягніть розширені градієнти на панель «Щітки» та виберіть «Художня кисть». Параметри кисті за замовчуванням, швидше за все, будуть нормальними, тому просто натисніть "ОК". Ви завжди можете пізніше налаштувати параметри кистей.

  2. Нанесіть свою нову пензлик.

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


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 разів: введіть тут опис зображення


Цей сценарій хороший, за винятком того, що є дві додаткові зупинки градієнта - одна на старті та одна в кінці - які не дозволяють градієнту бути абсолютно безшовними. Коли ви створюєте градієнт, за замовчуванням є дві зупинки.
MG_

Так, Illustator завжди додає стоп кольору на 100% під час генерації сценарію, навіть якщо ви не вказали його. Але якщо ви не вказуєте його, колір встановлюється чорним. Моє вирішення полягало в тому, щоб додати додаткову зупинку кольору на 100% за допомогою стартового кольору. Це не безшовно, але це найкраще, що я міг придумати.
PieBie

О ні, я зараз бачу, посилання на пасті - це старіша версія, я оновлю.
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);
}

Отже, він працює так само, як відповідь, яку я пов'язав, але має кілька додаткових варіантів: введіть тут опис зображення


-3

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

Другий підхід, який я б застосував, - це "крокувати і повторювати". Я не знаю, де і як ви хочете використовувати цей багаторазовий "хвилястий" градієнт, але "S&R" дуже зручний для множення речей у фотошопі. Просто натисніть "ctrl (cmd) + alt + t", зробіть свою справу (масштабуйте, перемістіть, поверніть об'єкт), натисніть клавішу Enter, а потім використовуйте "shift + ctrl (cmd) + alt + t", і фотошоп повторить те, що ви зробили. Якщо ви обертаєте, переміщуєте та масштабуєте об’єкт, Ps зробить це стільки разів, скільки ви натиснете на ярлик повторення. введіть тут опис зображення

Тут я просто пограв з другим найбільшим конвертом, а потім повторив крок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.