Wie kann man einen Farbverlauf in Illustrator und Photoshop mehrmals wiederholen?

So wiederholen Sie einen Farbverlauf 'n' Mal, indem Sie beispielsweise einen Schwarz-Weiß-Verlauf 5 Mal (entlang des Strichpfads) wiederholen, wie ich es manuell im folgenden Beispielbild getan habe.

Gibt es eine Möglichkeit, es zu automatisieren, um 'n' mal zu multiplizieren, wie 50 oder 100, ohne den Verlaufsregler manuell zu kopieren?

Farbverlauf mehrmals manuell wiederholt

Vishnu, hast du gerade versucht, es in eine Aktion umzuwandeln und aufzuzeichnen, um dasselbe so oft zu tun, wie du möchtest. Keine Aufregung, kein Muss.

Antworten (6)

Verwenden Sie Skripte!

Wie andere geantwortet haben, sollten Sie Scripting verwenden. Einige der anderen Lösungen hier verwenden jedoch nur RGB, während meine Farben verwendet, die Sie aus Ihrem Dokument auswählen. Außerdem erzeugten einige Lösungen am Umbruchpunkt keine gleichmäßige Farbe oder hatten zu viele und/oder überlappende Verlaufsstopps, sodass mein Skript diese Probleme angeht.

Um ihn zu verwenden, wählen Sie 2 oder mehr Pfade aus, die mit Farben gefüllt sind, die für den Verlauf vorgesehen sind, und geben Sie dann bei Aufforderung ein, wie oft der Verlauf wiederholt werden soll.

http://pasti.org/10924009

Bearbeiten : Pastie-Site funktioniert nicht, daher habe ich den folgenden Code eingefügt:

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

Beispiel 1: Schwarzweiß, 6-mal wiederholt, CMYK-Dokument:

Beispiel 1

Beispiel 2: 3 Farbverlauf, 6 Rapporte:

Beispiel 2

Beispiel 3: RGB-Dokument, 6 Farben, 20 Wiederholungen. Beachten Sie, wie sich die gefüllten Pfade überlappen? Diese Stapelreihenfolge (von vorne nach hinten) bestimmt die Reihenfolge der Farben im Farbverlauf.

Beispiel 3

Farben im Farbverlauf ändern: Wählen Sie einen Pfad mit dem angewendeten Farbverlauf aus und wählen Sie dann das Flyout-Menü des Farbfeldbedienfelds → Ausgewählte Farben hinzufügen. Neue globale Farbfelder werden dem Farbfeldbedienfeld hinzugefügt, und wenn Sie eines bearbeiten, wird es überall dort aktualisiert, wo es angezeigt wird.

Beispiel 4

Sehr schön. Ich mag die Tatsache, dass Sie die Farben aus der Auswahl erhalten. Hatte nicht daran gedacht.
Genial! Aber der paste.org-Link funktioniert nicht. Bitte prüfen und aktualisieren.
@Vishnu: Scheint, als wäre der ganze Pastie-Server ausgefallen. Ich vermute, Sie brauchen nur etwas Geduld, bis es wieder auftaucht.

Sie können dies mit Illustrator-Scripting erreichen. Überprüfen Sie die Dokumentation für CC15.3 in der JavaScript-Referenz-PDF unter Farbverläufe auf Seite 68.

Erstellen Sie die Farben:

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

Erstellen Sie den Farbverlauf:

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

Erstellen Sie einen linearen Farbverlauf:

newGradient.type = GradientType.LINEAR;  

oder Erstellen Sie einen radialen Farbverlauf:

newGradient.type = GradientType.RADIAL; 

Wo Sie die verschiedenen Arten des Farbverlaufs erstellen möchten, befindet sich in 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;

Entschuldigung, es wurde festgestellt, dass ich nicht vollständig erklärt habe, wie Sie einen Farbverlauf n - mal erstellen können, also habe ich das Skript weiter modifiziert, um eine Eingabeaufforderung und eine Schleife einzufügen.

Rufen Sie die Anzahl der Male an:

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

Erstellen Sie eine Schleife und fügen Sie die Anzahl der Farbverläufe hinzu:

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

Code oben eine Mischung aus dem, was auf den Seiten 65-71 über den Link oben steht:

Beispiel mit 1 Mal:

Geben Sie hier die Bildbeschreibung ein

Beispiel mit 5 mal:

Geben Sie hier die Bildbeschreibung ein

Sie können ändern lastStop.rampPoint - n, um anzupassen, wo sie landen. Hoffe das hilft.

Dies funktioniert nur, wenn Sie den Farbverlauf als Strich verwenden (wie in Ihrer Frage). Wenn Sie den Verlauf endlos wiederholen möchten (im Gegensatz zu einer bestimmten Anzahl von Wiederholungen), können Sie die Schritte 2 und 3 überspringen und einen Musterpinsel anstelle eines Kunstpinsels verwenden. In CC können Sie jetzt Bilder in Pinseln verwenden, sodass Sie den Farbverlauf möglicherweise rastern können, anstatt ihn zu erweitern, aber ich verwende CS6, daher kann ich das nicht testen.

  1. Richten Sie ein einzelnes Rechteck ein, das mit dem Farbverlauf gefüllt ist, den Sie wiederholen möchten.

Geben Sie hier die Bildbeschreibung ein

  1. Verwenden Sie einen Transformationseffekt ( Effekt → Verzerren & Transformieren → Transformieren ... ), um Ihr Rechteck zu duplizieren. Stellen Sie die horizontale Verschiebung auf die Breite Ihres Rechtecks ​​ein und legen Sie so viele Kopien fest, wie Sie benötigen.

Geben Sie hier die Bildbeschreibung ein

  1. Erweitern Sie den Transformationseffekt ( Objekt → Darstellung erweitern ).

  2. Sie können keine Farbverläufe in Pinseln verwenden, daher müssen Sie den Farbverlauf erweitern ( Objekt → Erweitern ) und unter "Verlauf erweitern auf" eine Reihe von Objekten auswählen, auf die Sie erweitern möchten.

    Wenn Sie den Farbverlauf erweitern, bleiben einige Schnittmasken im erweiterten Farbverlauf zurück. Sie müssen die Ebenen durchgehen und diese löschen (oder mit der rechten Maustaste klicken und "Gruppierung aufheben" und dann "Schnittmaske freigeben", bis keine Masken mehr vorhanden sind).

Geben Sie hier die Bildbeschreibung ein

  1. Ziehen Sie Ihre erweiterten Farbverläufe in das Pinselbedienfeld und wählen Sie „Kunstpinsel“. Die Standardoptionen für Ihren Pinsel sind höchstwahrscheinlich in Ordnung, also klicken Sie einfach auf "OK". Sie können jederzeit zurückgehen und die Pinseloptionen später anpassen.

  2. Wende deinen neuen Pinsel an.

Geben Sie hier die Bildbeschreibung ein

Basierend auf dem Illustrator JS-Handbuch habe ich mir den folgenden Code ausgedacht. Dieser Code macht genau das, was Sie wollen:

  • Erstellt einen Farbverlauf mit zwei Farbstopps: Schwarz und Weiß
  • Wiederholt es fünfmal
  • Wendet es als Strich auf das aktive (ausgewählte) Element an

Eine allgemeinere Version findet sich unterhalb der Zeile.

Geben Sie hier die Bildbeschreibung ein

(1) Zuerst stellen wir die gewünschte Anzahl von Farben und die gewünschten Zeiten ein, die der Farbverlauf durchlaufen muss:

//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) Dann setzen wir einige Variablen, die später verwendet werden sollen. Der GradientIntervalberechnet die prozentuale Position, auf die jeder Punkt gesetzt werden muss. totalNumberofStopsist ziemlich selbsterklärend. Das colorsArray wird später verwendet.

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

(3) Dann können wir unsere Farben definieren. Sie benötigen genau so viele Farben wie numberOfColorsam Anfang eingestellt. Fehlende Farben werden standardmäßig auf Schwarz gesetzt.

//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) Zeit, unseren Farbverlauf zu erstellen und ihm einen Namen zu geben. Wir können jetzt auch den Typ festlegen.

//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) Nun zum guten Teil. Zuerst machen wir eine Schleife über die totalNumberOfStops, damit wir jeden Stopp erstellen und dem Farbverlauf hinzufügen können. Wir erstellen einen neuen Stopp und setzen ihn einen Schritt weiter als den letzten. Jetzt müssen wir die richtige Farbe aus unserem Farb-Array erhalten. Wenn der Modulus des Schleifenindex dividiert durch die Anzahl der Farben 0 ist, wissen wir, dass wir alle Farben hatten und von vorne beginnen müssen, also setzen wir unseren Farbindex zurück.

Beispiel Angenommen, ich habe sechs Farben, die ich fünfmal wiederholen möchte. Wir haben dreißig Haltestellen. Wir durchlaufen alle Farben mit j. Wenn j6 wird, gibt es keine weiteren Farben (sechs ist die siebte Farbe im Array, aber es gibt nur sechs Farben im Array). Also fangen wir bei jedem Vielfachen von 6 wieder bei 0 an. Sonst gehen wir einfach zur nächsten Farbe über.

Jetzt müssen wir nur noch den letzten Farbstopp bei 100% hinzufügen.

//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) Der letzte Schritt: Anwenden des Farbverlaufs auf den Strich. Fertig. Party!

//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) Möglicherweise müssen Sie den Strich manuell auf "Farbverlauf entlang des Strichs anwenden" einstellen, da ich den Code dafür nicht gefunden habe.

Farbverlauf


Dieser Code wurde speziell für Ihren Fall erstellt. Eine allgemeinere Version finden Sie hier: http://pastie.org/10921740

Einige Beispiele:

Ein Farbverlauf mit zwei Farben, der sich zweimal wiederholt:Geben Sie hier die Bildbeschreibung ein

Ein Farbverlauf mit fünf Farben, der sich 10 Mal wiederholt:Geben Sie hier die Bildbeschreibung ein

Ein Farbverlauf mit zwei Farben, der sich 50 Mal wiederholt:Geben Sie hier die Bildbeschreibung ein

Ein satter Farbverlauf mit 50 Farben, die sich 50 Mal wiederholen:Geben Sie hier die Bildbeschreibung ein

Dieses Skript ist gut, außer dass es zwei zusätzliche Farbverlaufsstopps gibt – einen am Anfang und einen am Ende – die verhindern, dass der Farbverlauf vollständig nahtlos ist. Wenn Sie einen Farbverlauf erstellen, gibt es standardmäßig zwei Stopps.
Ja Illustator fügt beim Generieren aus einem Skript immer einen Farbstopp bei 100 % hinzu, auch wenn Sie keinen angeben. Aber wenn Sie es nicht angeben, wird die Farbe auf Schwarz gesetzt. Meine Problemumgehung bestand darin, mit der Startfarbe einen zusätzlichen Farbstopp bei 100% hinzuzufügen. Es ist nicht nahtlos, aber es ist das Beste, was ich mir vorstellen konnte.
Oh nein, ich sehe jetzt, der Pastie-Link ist eine ältere Version, ich werde aktualisieren.

Ich hatte genau das gleiche Problem und diese Antwort von MG_ war genau das, was ich brauchte!

Allerdings habe ich nach einiger Zeit gemerkt, dass ich hin und wieder auch nicht glatte Farbverläufe und auch nicht nahtlose Farbverläufe brauche. Es war ein bisschen mühsam, eine gute Lösung zu finden, deshalb teile ich das modifizierte Skript hier für andere mit dem gleichen Problem. Ich habe auch eine einfache Benutzeroberfläche hinzugefügt, um alles einzurichten.

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

Im Grunde funktioniert es genauso wie die Antwort, die ich verlinkt habe, hat aber ein paar zusätzliche Optionen:Geben Sie hier die Bildbeschreibung ein

Nun, ich würde den Verlauf nicht vollständig verwenden. Erstellen Sie zuerst einen Farbverlauf wie den, den Sie haben, füllen Sie dann eine Leinwand damit und definieren Sie das Muster (Bearbeiten> Muster definieren). Dann gehst du zu Layer . neue Füllebene und Muster auswählen. Sie können eine vorhandene Ebene als Schnittmaske verwenden. Nun, das "n" ist "Skalierung", also ist 100 % 1, 50 % ist n = 2 und so weiter. Je kleiner der Maßstab, desto wiederholbarer werden das Muster und der Farbverlauf.

Der zweite Ansatz, den ich wählen würde, ist "Step and Repeat". Ich weiß nicht, wo und wie Sie diesen mehrfachen "welligen" Verlauf verwenden möchten, aber "S & R" ist sehr praktisch, um Dinge in Photoshop zu multiplizieren. Drücken Sie einfach "Strg (cmd) + Alt + T", tun Sie Ihr Ding (Objekt skalieren, verschieben, drehen), drücken Sie die Eingabetaste und verwenden Sie dann "Umschalt + Strg (cmd) + Alt + T", und Photoshop repliziert, was Sie getan haben. Wenn Sie ein Objekt drehen, verschieben und skalieren, wird Ps dies so oft tun, wie Sie die Wiederholungstaste drücken.Geben Sie hier die Bildbeschreibung ein

Hier habe ich einfach mit der zweitgrößten Hüllkurve gespielt und dann den Schritt wiederholt.