Làm cách nào để lặp lại một gradient nhiều lần trong Illustrator và Photoshop?


12

Ví dụ, cách lặp lại một gradient 'n' lần, lặp lại gradient đen thành trắng 5 lần (dọc theo đường nét) như tôi đã thực hiện thủ công trong hình ảnh ví dụ bên dưới.

Có cách nào để tự động hóa nó để nhân 'n' lần, giống như 50 hay 100, mà không tự sao chép các thanh trượt dốc?

Gradient lặp đi lặp lại nhiều lần bằng tay


Vishnu, Bạn vừa thử biến nó thành một hành động & ghi lại nó để làm điều tương tự như bạn muốn. Không ồn ào Không ầm ĩ.
Sean

Câu trả lời:


7

Sử dụng kịch bản!

Như những người khác đã trả lời, bạn nên sử dụng kịch bản. Nhưng một số giải pháp khác ở đây chỉ sử dụng RGB, trong khi của tôi sử dụng màu bạn chọn từ tài liệu của mình. Ngoài ra, một số giải pháp không tạo ra màu chẵn ở điểm bao quanh, hoặc có quá nhiều điểm dừng và / hoặc chồng chéo, vì vậy tập lệnh của tôi giải quyết các vấn đề đó.

Để sử dụng nó, chọn 2 hoặc nhiều đường dẫn chứa đầy màu sắc dành cho gradient, sau đó khi được nhắc nhập số lần để lặp lại gradient.

http://pastie.org/10924009

Chỉnh sửa : trang web pastie không hoạt động, vì vậy tôi đã bao gồm mã bên dưới:

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

Ví dụ 1: đen trắng, lặp lại 6 lần, tài liệu CMYK:

ví dụ 1

Ví dụ 2: 3 màu gradient, 6 lần lặp lại:

ví dụ 2

Ví dụ 3: Tài liệu RGB, 6 màu, 20 lần lặp lại. Chú ý các đường dẫn được lấp đầy như thế nào? Thứ tự sắp xếp đó (từ trước ra sau) xác định thứ tự các màu trong gradient.

ví dụ 3

Thay đổi màu trong gradient : Chọn một đường dẫn với gradient được áp dụng, sau đó chọn menu bay ra Swatches Panel → Thêm các màu được chọn. Các mẫu màu toàn cầu mới sẽ được thêm vào bảng swatches và khi bạn chỉnh sửa một mẫu, nó sẽ được cập nhật ở mọi nơi nó xuất hiện.

ví dụ 4


Rất đẹp. Tôi thích thực tế là bạn có được màu sắc từ các lựa chọn. Không nghĩ về điều đó.
PieBie

Tuyệt vời! Nhưng liên kết paste.org không hoạt động. Vui lòng kiểm tra và cập nhật.
vishnu

1
@Vishnu: có vẻ như toàn bộ máy chủ pastie ngừng hoạt động. Tôi đoán bạn sẽ chỉ cần một chút kiên nhẫn cho đến khi nó trở lại.
PieBie

6

Bạn có thể đạt được điều này với kịch bản Illustrator. Kiểm tra tài liệu về CC15.3 trong tệp PDF Tham khảo JavaScript trong Phần trên trang 68.

Tạo màu sắc:

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

Tạo độ dốc:

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

Tạo một gradient tuyến tính:

newGradient.type = GradientType.LINEAR;  

hoặc Tạo một gradient xuyên tâm:

newGradient.type = GradientType.RADIAL; 

Nơi bạn muốn xây dựng nhiều loại gradient sẽ là 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;

Tôi xin lỗi, tôi đã lưu ý rằng tôi đã không giải thích đầy đủ về cách bạn có thể tạo một gradient n lần nên tôi đã sửa đổi tập lệnh thêm để bao gồm một dấu nhắc và vòng lặp.

Gọi số lần:

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

Tạo một vòng lặp và thêm số lượng độ dốc:

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;
}

Mã ở trên một hỗn hợp của những gì ở trang 65-71 từ liên kết ở trên cùng:

Ví dụ với 1 lần:

nhập mô tả hình ảnh ở đây

Ví dụ với 5 lần:

nhập mô tả hình ảnh ở đây

Bạn có thể sửa đổi lastStop.rampPoint - nđể điều chỉnh nơi họ hạ cánh. Hi vọng điêu nay co ich.


5

Điều này sẽ chỉ hoạt động nếu bạn đang sử dụng gradient như một nét (như trong câu hỏi của bạn). Nếu bạn muốn lặp lại độ dốc vô tận (trái ngược với số lần lặp cụ thể) thì bạn có thể bỏ qua bước 2 và 3 và sử dụng cọ vẽ mẫu thay vì cọ vẽ nghệ thuật. Trong CC bây giờ bạn có thể sử dụng hình ảnh trong cọ vẽ để bạn có thể raster gradient thay vì mở rộng nó nhưng tôi đang sử dụng CS6 vì vậy tôi không thể kiểm tra điều đó.

  1. Thiết lập một hình chữ nhật duy nhất chứa đầy gradient bạn muốn lặp lại.

nhập mô tả hình ảnh ở đây

  1. Sử dụng hiệu ứng biến đổi ( Hiệu ứng → Biến dạng & Biến đổi → Biến đổi ... ) để nhân đôi hình chữ nhật của bạn. Đặt di chuyển ngang theo chiều rộng của hình chữ nhật của bạn và đặt bao nhiêu bản sao bạn cần.

nhập mô tả hình ảnh ở đây

  1. Mở rộng hiệu ứng biến đổi ( Đối tượng → Mở rộng Hình thức ).

  2. Bạn không thể sử dụng độ dốc trong cọ vẽ, do đó bạn sẽ cần mở rộng độ dốc ( Đối tượng → Mở rộng ), chọn một số đối tượng để mở rộng sang bên dưới "Mở rộng Gradient sang".

    Mở rộng gradient sẽ để lại cho bạn một số mặt nạ cắt trong gradient mở rộng, bạn sẽ cần phải đi qua các lớp và xóa chúng (hoặc tiếp tục nhấp chuột phải và "Ungroup" sau đó "Phát hành Clipping Mask" cho đến khi không còn mặt nạ nào nữa).

nhập mô tả hình ảnh ở đây

  1. Kéo gradient mở rộng của bạn vào bảng Brush và chọn "Art Brush". Các tùy chọn mặc định cho bàn chải của bạn rất có thể sẽ ổn, vì vậy chỉ cần nhấn "OK". Bạn luôn có thể quay lại và điều chỉnh các tùy chọn bàn chải sau.

  2. Áp dụng bàn chải mới của bạn.

nhập mô tả hình ảnh ở đây


5

Dựa trên hướng dẫn sử dụng Illustrator JS Tôi đã đưa ra mã dưới đây. Mã này thực hiện chính xác những gì bạn muốn:

  • Tạo một gradient với hai điểm dừng màu: đen và trắng
  • Lặp lại năm lần
  • Áp dụng nó như một nét cho phần tử đang hoạt động (được chọn)

Một phiên bản tổng quát hơn có thể được tìm thấy bên dưới dòng.

nhập mô tả hình ảnh ở đây

(1) Trước tiên, chúng tôi đặt số lượng màu mong muốn và số lần mong muốn mà gradient cần lặp lại:

//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) Sau đó, chúng tôi đặt một số biến sẽ được sử dụng sau. CácGradientInterval tính toán vị trí tỷ lệ phần trăm mỗi điểm cần được đặt tại. totalNumberofStopslà khá tự giải thích. Các colorsmảng sẽ được sử dụng sau.

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

(3) Sau đó, chúng ta có thể xác định màu sắc của chúng tôi. Bạn cần chính xác nhiều màu như được thiết lập ở numberOfColorsđầu. Thiếu màu sẽ mặc định thành màu đen.

//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) Thời gian để tạo gradient của chúng tôi và đặt tên cho nó. Bây giờ chúng ta cũng có thể đặt loại.

//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) Bây giờ cho phần tốt. Đầu tiên chúng ta sẽ lặp lạitotalNumberOfStops để chúng ta có thể tạo từng điểm dừng và thêm nó vào gradient. Chúng tôi tạo một điểm dừng mới và đặt điểm dừng xa hơn điểm dừng cuối cùng. Bây giờ chúng ta cần phải có được màu sắc phù hợp từ mảng màu của chúng tôi. Khi mô-đun của chỉ số vòng lặp chia cho số lượng màu là 0, chúng ta biết rằng chúng ta đã có mọi màu và chúng ta cần bắt đầu lại, vì vậy chúng ta đặt lại chỉ số màu của mình.

Thí dụ Nói rằng tôi có sáu màu mà tôi muốn lặp 5 lần. Chúng tôi đã có ba mươi điểm dừng. Chúng tôi lặp lại tất cả các màu bằng cách sử dụng j. Khi jtrở thành 6 thì không còn màu nào nữa (sáu là màu thứ bảy trong mảng nhưng chỉ có sáu màu trong mảng). Vì vậy, mỗi bội số của sáu chúng ta bắt đầu lại ở 0. Khác, chúng ta chỉ cần chuyển sang màu tiếp theo.

Bây giờ chúng ta chỉ cần thêm điểm dừng màu cuối cùng ở mức 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) Bước cuối cùng: áp dụng gradient cho đột quỵ. Làm xong. Buổi tiệc!

//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) Bạn có thể phải đặt đột quỵ thành 'Áp dụng độ dốc dọc theo nét vẽ' vì tôi không tìm thấy mã để thực hiện việc này.

đột quỵ gradient


Mã này được thực hiện đặc biệt cho trường hợp của bạn. Một phiên bản tổng quát hơn có thể được tìm thấy ở đây: http://pastie.org/10921740

Vài ví dụ:

Một gradient có hai màu, lặp lại hai lần: nhập mô tả hình ảnh ở đây

Một gradient với năm màu, lặp lại 10 lần: nhập mô tả hình ảnh ở đây

Một gradient có hai màu, lặp lại 50 lần: nhập mô tả hình ảnh ở đây

Một gradient khổng lồ với 50 màu lặp lại 50 lần: nhập mô tả hình ảnh ở đây


Kịch bản này là tốt, ngoại trừ việc có thêm hai điểm dừng gradient - một ở đầu và một ở cuối - ngăn gradient hoàn toàn liền mạch. Khi bạn tạo một gradient, có hai điểm dừng theo mặc định.
MG_

Có Illustator luôn thêm điểm dừng màu ở mức 100% khi tạo từ tập lệnh, ngay cả khi bạn không chỉ định một tập lệnh. Nhưng nếu bạn không chỉ định nó, màu sẽ được đặt thành màu đen. Cách giải quyết của tôi là thêm một điểm dừng màu bổ sung ở mức 100% với startcolor. Nó không liền mạch, nhưng đó là thứ tốt nhất tôi có thể nghĩ ra.
PieBie

Ồ không, tôi thấy bây giờ, liên kết pastie là một phiên bản cũ hơn, tôi sẽ cập nhật.
PieBie

0

Tôi đã có cùng một vấn đề, và câu trả lời của MG_ chính là thứ tôi cần!

Tuy nhiên, sau một thời gian, tôi nhận thấy rằng thỉnh thoảng tôi cũng cần độ dốc không mịn, và cả độ dốc không liền mạch. Thật là một chút đau đớn để tìm một giải pháp tốt, vì vậy tôi đang chia sẻ kịch bản sửa đổi ở đây cho những người khác có cùng vấn đề. Tôi cũng bao gồm UI đơn giản để thiết lập mọi thứ.

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);
}

Về cơ bản, nó hoạt động giống như câu trả lời tôi đã liên kết, nhưng có thêm hai tùy chọn: nhập mô tả hình ảnh ở đây


-3

Vâng, tôi sẽ không sử dụng gradient tất cả các cách. Đầu tiên tạo một gradient giống như bạn có, sau đó điền vào một khung vẽ với nó và xác định mẫu (chỉnh sửa> xác định mẫu). Sau đó, bạn vào Layer. lớp điền mới và chọn mẫu. Bạn có thể sử dụng lớp hiện có như một mặt nạ cắt. Bây giờ, "n" là "tỷ lệ" nên 100% là 1, 50% là n = 2, v.v. Tỷ lệ càng nhỏ, mẫu và độ dốc sẽ lặp lại nhiều hơn.

Cách tiếp cận thứ hai tôi sẽ thực hiện là "bước và lặp lại". Tôi không biết bạn muốn sử dụng nhiều gradient "lượn sóng" này ở đâu và "S & R" rất tiện dụng để nhân lên nhiều thứ trong photoshop. Chỉ cần nhấn "ctrl (cmd) + alt + t" làm việc của bạn (chia tỷ lệ, di chuyển, xoay đối tượng), nhấn Enter, sau đó sử dụng "shift + ctrl (cmd) + alt + t" và photoshop sẽ sao chép những gì bạn đã làm. Nếu bạn xoay, di chuyển và chia tỷ lệ một đối tượng Ps sẽ làm điều đó nhiều lần khi bạn nhấn phím tắt lặp lại. nhập mô tả hình ảnh ở đây

Ở đây tôi chỉ chơi với phong bì lớn thứ hai và sau đó lặp lại bước này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.