Bagaimana cara mengulang gradien beberapa kali di Illustrator dan Photoshop?

12

Bagaimana cara mengulang gradien 'n' kali, misalnya, mengulangi gradien hitam ke putih 5 kali (di sepanjang jalur goresan) seperti yang telah saya lakukan secara manual pada contoh gambar di bawah ini.

Apakah ada cara untuk mengotomatiskannya agar berlipat kali 'n' , seperti 50 atau 100, tanpa secara manual menyalin slider gradien?

Gradien diulang beberapa kali secara manual

Wisnu
sumber
Wisnu, Apakah Anda baru saja mencoba mengubahnya menjadi tindakan & merekamnya untuk melakukan hal yang sama sesering yang Anda inginkan. Tidak perlu repot.
Sean

Jawaban:

7

Gunakan skrip!

Seperti yang dijawab orang lain, Anda harus menggunakan skrip. Tetapi beberapa solusi lain di sini hanya menggunakan RGB, sedangkan saya menggunakan warna yang Anda pilih dari dokumen Anda. Juga beberapa solusi tidak menghasilkan warna genap pada titik sampul, atau memiliki terlalu banyak dan / atau berhenti gradien yang tumpang tindih, jadi skrip saya mengatasi masalah tersebut.

Untuk menggunakannya, pilih 2 jalur atau lebih yang diisi dengan warna yang dimaksudkan untuk gradien, lalu ketika diminta masukkan berapa kali untuk mengulangi gradien.

http://pastie.org/10924009

Sunting : situs pastie tidak berfungsi, jadi saya telah memasukkan kode di bawah ini:

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

Contoh 1: hitam dan putih, berulang 6 kali, dokumen CMYK:

Contoh 1

Contoh 2: 3 gradien warna, 6 berulang:

contoh 2

Contoh 3: RGB doc, 6 warna, 20 repetisi. Perhatikan bagaimana jalur yang diisi tumpang tindih? Agar susun (depan ke belakang) menentukan urutan warna dalam gradien.

contoh 3

Mengubah warna dalam gradien : Pilih jalur dengan gradien diterapkan, lalu pilih menu fly-out Panel Swatch → Tambah warna yang dipilih. Swatch global baru akan ditambahkan ke panel swatch, dan ketika Anda mengeditnya, ia diperbarui di mana-mana ia muncul.

contoh 4

MG_
sumber
Sangat bagus. Saya suka fakta bahwa Anda mendapatkan warna dari seleksi. Tidak memikirkan itu.
PieBie
Luar biasa! Tetapi tautan paste.org tidak berfungsi. Silakan periksa dan Perbarui.
vishnu
1
@ Wisnu: sepertinya seluruh server pastie sedang down. Saya kira Anda hanya perlu kesabaran sampai muncul kembali.
PieBie
6

Anda dapat mencapai ini dengan skrip Illustrator. Memeriksa dokumentasi untuk CC15.3 dalam JavaScript Reference PDF di bawah Gradients pada halaman 68.

Buat warna:

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

Buat gradien:

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

Buat gradien linier:

newGradient.type = GradientType.LINEAR;  

atau Buat gradien radial:

newGradient.type = GradientType.RADIAL; 

Di mana Anda ingin membangun beberapa jenis gradien akan berada di 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;

Maaf, tercatat saya tidak sepenuhnya menjelaskan bagaimana Anda bisa membuat gradien dan kali jadi saya memodifikasi skrip lebih lanjut untuk memasukkan prompt dan loop.

Panggil berapa kali:

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

Buat loop dan selanjutnya tambahkan jumlah gradien:

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

Kode di atas campuran dari apa yang ada di halaman 65-71 dari tautan di atas:

Contoh dengan 1 kali:

masukkan deskripsi gambar di sini

Contoh dengan 5 kali:

masukkan deskripsi gambar di sini

Anda dapat memodifikasi lastStop.rampPoint - nuntuk menyesuaikan tempat mereka mendarat. Semoga ini membantu.

DᴀʀᴛʜVᴀᴅᴇʀ
sumber
5

Ini hanya akan berfungsi jika Anda menggunakan gradien sebagai goresan (seperti dalam pertanyaan Anda). Jika Anda ingin mengulangi gradien tanpa henti (tidak seperti jumlah pengulangan tertentu) maka Anda dapat melewati langkah 2 dan 3 dan menggunakan kuas pola alih-alih kuas seni. Di CC Anda sekarang dapat menggunakan gambar dalam kuas sehingga Anda mungkin dapat meraster gradien alih-alih meluaskannya tapi saya menggunakan CS6 jadi saya tidak bisa mengujinya.

  1. Siapkan satu persegi panjang yang diisi dengan gradien yang ingin Anda ulangi.

masukkan deskripsi gambar di sini

  1. Gunakan efek transformasi ( Efek → Distort & Transform → Transform ... ) untuk menduplikasi persegi panjang Anda. Atur gerakan horizontal sesuai lebar persegi panjang Anda dan atur sebanyak mungkin salinan yang Anda butuhkan.

masukkan deskripsi gambar di sini

  1. Perluas efek transformasi ( Objek → Perluas Tampilan ).

  2. Anda tidak dapat menggunakan gradien dalam kuas sehingga Anda perlu memperluas gradien ( Objek → Perluas ), pilih sejumlah objek untuk memperluas Anda ke dalam "Expand Gradient To".

    Memperluas gradien akan meninggalkan Anda dengan beberapa topeng kliping di gradien yang diperluas, Anda harus melewati lapisan-lapisan dan menghapusnya (atau terus mengklik kanan dan "Ungroup" lalu "Lepaskan Kliping Topeng" sampai tidak ada lagi topeng).

masukkan deskripsi gambar di sini

  1. Seret gradien yang diperluas ke panel Brushes dan pilih "Art Brush". Opsi default untuk kuas Anda kemungkinan besar akan ok jadi tekan saja "OK". Anda selalu dapat kembali dan menyesuaikan opsi kuas nanti.

  2. Terapkan kuas baru Anda.

masukkan deskripsi gambar di sini

Cai
sumber
5

Berdasarkan manual Illustrator JS, saya menemukan kode di bawah ini. Kode ini melakukan apa yang Anda inginkan:

  • Membuat gradien dengan dua pemberhentian warna: hitam dan putih
  • Ulangi lima kali
  • Terapkan sebagai goresan ke elemen aktif (dipilih)

Versi yang lebih umum dapat ditemukan di bawah baris.

masukkan deskripsi gambar di sini

(1) Pertama-tama kita mengatur jumlah warna yang diinginkan dan waktu yang diinginkan gradien perlu diulang:

//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) Kemudian kita atur beberapa variabel untuk digunakan nanti. The GradientIntervalmenghitung posisi persentase masing-masing kebutuhan titik yang akan ditetapkan pada. totalNumberofStopscukup jelas. The colorsarray akan digunakan kemudian.

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

(3) Lalu kita bisa mendefinisikan warna kita. Anda membutuhkan warna sebanyak yang diatur di numberOfColorsawal. Warna yang hilang akan menjadi hitam.

//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) Saatnya membuat gradien kami dan beri nama. Kita sekarang juga dapat mengatur tipenya.

//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) Sekarang untuk bagian yang baik. Pertama kita akan mengulangi totalNumberOfStopssehingga kita dapat membuat setiap stop dan menambahkannya ke gradien. Kami membuat pemberhentian baru dan menetapkan yang lebih jauh dari yang terakhir. Sekarang kita perlu mendapatkan warna yang tepat dari susunan warna kita. Ketika modulus dari indeks loop dibagi dengan jumlah warna adalah 0, kita tahu bahwa kita sudah memiliki setiap warna dan kita perlu memulai lagi, jadi kita mengatur ulang indeks warna kita.

Contoh Katakanlah saya punya enam warna yang ingin saya putar 5 kali. Kami punya tiga puluh perhentian. Kami mengulangi semua warna menggunakan j. Ketika jmenjadi 6 tidak ada lagi warna (enam adalah warna ketujuh dalam array tetapi hanya ada enam warna dalam array). Jadi setiap kelipatan dari enam kita mulai lagi dari 0. Lain kita hanya beralih ke warna berikutnya.

Sekarang kita hanya perlu menambahkan penghenti warna akhir pada 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) Langkah terakhir: menerapkan gradien ke stroke. Selesai Pesta!

//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) Anda mungkin harus mengatur stroke ke 'Terapkan gradien sepanjang stroke' secara manual, karena saya belum menemukan kode untuk melakukan ini.

stroke gradien


Kode ini khusus dibuat untuk kasus Anda. Versi yang lebih umum dapat ditemukan di sini: http://pastie.org/10921740

Beberapa contoh:

Gradien dengan dua warna, ulangi dua kali: masukkan deskripsi gambar di sini

Gradien dengan lima warna, berulang 10 kali: masukkan deskripsi gambar di sini

Gradien dengan dua warna, berulang 50 kali: masukkan deskripsi gambar di sini

Gradien kekalahan dengan 50 warna berulang 50 kali: masukkan deskripsi gambar di sini

PieBie
sumber
Skrip ini bagus, kecuali bahwa ada dua berhenti gradien tambahan - satu di awal dan satu di akhir - yang mencegah gradien menjadi sepenuhnya mulus. Saat Anda membuat gradien, ada dua berhenti secara default.
MG_
Ya Illustator selalu menambahkan penghentian warna pada 100% saat membuat dari skrip, bahkan jika Anda tidak menentukannya. Tetapi jika Anda tidak menentukannya, warnanya diatur ke hitam. Solusi saya adalah menambahkan penghentian warna ekstra pada 100% dengan warna awal. Ini tidak mulus, tapi itu yang terbaik yang bisa saya lakukan.
PieBie
Oh tidak, saya mengerti sekarang, tautan pastie adalah versi yang lebih lama, saya akan memperbarui.
PieBie
0

Saya memiliki masalah yang sama, dan jawaban oleh MG_ itulah yang saya butuhkan!

Namun, setelah beberapa saat, saya perhatikan bahwa kadang-kadang saya juga membutuhkan gradien yang tidak mulus, dan juga gradien yang tidak mulus. Agak menyakitkan untuk menemukan solusi yang baik, jadi saya berbagi skrip yang dimodifikasi di sini untuk orang lain dengan masalah yang sama. Saya juga menyertakan UI sederhana untuk mengatur semuanya.

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

Jadi pada dasarnya ini bekerja dengan cara yang sama dengan jawaban yang saya tautkan, tetapi memiliki beberapa opsi tambahan: masukkan deskripsi gambar di sini

kaarto
sumber
-3

Yah, saya tidak akan menggunakan gradien sepanjang jalan. Pertama buat gradien seperti yang Anda miliki, kemudian isi kanvas dengan itu dan tentukan pola (edit> define pola). Lalu Anda pergi ke Layer. isi layer baru dan pilih pola. Anda dapat menggunakan lapisan yang ada sebagai topeng kliping. Sekarang, "n" adalah "skala" sehingga 100% adalah 1, 50% adalah n = 2 dan seterusnya. Skala yang lebih kecil akan semakin berulang pola, dan gradien, akan menjadi.

Pendekatan kedua yang akan saya ambil adalah "langkah dan ulangi". Saya tidak tahu di mana dan bagaimana Anda ingin menggunakan beberapa gradien "bergelombang" ini tetapi "S&R" sangat berguna untuk mengalikan hal-hal di photoshop. Cukup tekan "ctrl (cmd) + alt + t" lakukan hal Anda (skala, pindahkan, putar objek), tekan Enter, lalu gunakan "shift + ctrl (cmd) + alt + t" dan photoshop akan mereplikasi apa yang Anda lakukan. Jika Anda memutar, gerakkan dan skala objek yang akan dilakukan ps sebanyak waktu yang Anda lakukan pada pintasan berulang. masukkan deskripsi gambar di sini

Di sini saya hanya bermain dengan amplop terbesar kedua dan kemudian mengulangi langkahnya.

SZCZERZO KŁY
sumber