回答:
スクリプトを使用してください!
他の人が答えたように、スクリプトを使用する必要があります。しかし、ここでの他のソリューションのいくつかはRGBのみを使用しますが、私のソリューションではドキュメントから選択した色を使用します。また、一部のソリューションでは、ラップアラウンドポイントで色が生成されなかったり、グラデーションストップが多かったり重複したりしたため、スクリプトでこれらの問題に対処しています。
使用するには、グラデーション用の色で塗りつぶされた2つ以上のパスを選択し、プロンプトが表示されたらグラデーションを繰り返す回数を入力します。
編集: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文書:
例2:3色のグラデーション、6回の繰り返し:
例3:RGBドキュメント、6色、20回の繰り返し。塗りつぶされたパスがどのように重なり合っているかに注意してください。その積み重ね順序(前から後ろ)がグラデーションの色の順序を決定します。
グラデーションの色を変更する:グラデーションを適用したパスを選択し、スウォッチパネルのフライアウトメニュー→選択した色を追加を選択します。新しいグローバルスウォッチがスウォッチパネルに追加され、編集すると、表示されるすべての場所で更新されます。
これは、Illustratorスクリプトを使用して実現できます。68ページの「グラデーション」にあるJavaScriptリファレンスPDFの CC15.3のドキュメントを確認してください。
色を作成します。
// 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
して、着陸する場所を調整できます。お役に立てれば。
これは、グラデーションをストロークとして使用している場合にのみ機能します(質問のように)。グラデーションを(特定の回数ではなく)無限に繰り返す場合は、手順2と3をスキップして、アートブラシの代わりにパターンブラシを使用できます。CCでは、ブラシで画像を使用できるため、グラデーションを展開する代わりにラスタライズできますが、CS6を使用しているのでテストできません。
変形効果を展開します(オブジェクト→外観を展開)。
ブラシでグラデーションを使用することはできません。そのため、グラデーションを拡張する必要があります(オブジェクト→展開)。
グラデーションを展開すると、展開されたグラデーションにクリッピングマスクが残ります。レイヤーを通過してそれらを削除する必要があります(または、マスクがなくなるまで右クリックして[グループ解除]、[クリッピングマスクの解放]を続けます)。
展開したグラデーションを[ブラシ]パネルにドラッグし、[アートブラシ]を選択します。ブラシのデフォルトオプションはほとんどの場合OKなので、[OK]を押してください。いつでも戻ってブラシオプションを後で調整できます。
新しいブラシを適用します。
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
各ストップを作成し、グラデーションに追加します。新しいストップを作成し、最後のストップよりさらに1つ設定します。次に、colors配列から正しい色を取得する必要があります。ループインデックスの係数を色の数で除算した値が0の場合、すべての色が揃っていることがわかり、再度開始する必要があるため、カラーインデックスをリセットします。
例 5回ループしたい6色があるとします。30ストップあります。を使用してすべての色をループしますj
。場合j
なる6にはより多くの色は、(6つのアレイ内の第七色であるが、わずか6色配列である)が存在しません。したがって、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にあります。
いくつかの例:
私はまったく同じ問題を抱えていましたが、MG_によるその答えはまさに私が必要としていたものでした!
しかし、しばらくして、私は時々滑らかではないグラデーションもシームレスでないグラデーションも必要であることに気付きました。良い解決策を見つけるのは少し苦痛だったので、同じ問題を抱えている他の人のために、ここで修正されたスクリプトを共有しています。また、すべてをセットアップするためのシンプルなUIを含めました。
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);
}
まあ、私はグラデーションをずっと使用しません。最初にあなたが持っているようなグラデーションを作成し、それをキャンバスで埋めてパターンを定義します(編集>パターンの定義)。次に、レイヤーに移動します。新しい塗りつぶしレイヤーとパターンを選択します。既存のレイヤーをクリッピングマスクとして使用できます。現在、「n」は「スケール」であるため、100%は1、50%はn = 2などです。スケールが小さいほど、パターンとグラデーションがより繰り返し可能になります。
私が取る2番目のアプローチは、「ステップアンドリピート」です。この複数の「波状」グラデーションをどこでどのように使用したいかはわかりませんが、「S&R」はphotoshopで物事を増やすのに非常に便利です。「ctrl(cmd)+ alt + t」を押すだけで目的の操作(オブジェクトの拡大縮小、移動、回転)を実行し、Enterキーを押して「shift + ctrl(cmd)+ alt + t」を使用すると、Photoshopがあなたがしたことを再現します。オブジェクトを回転、移動、拡大縮小すると、Psは繰り返しショートカットを押すたびにそのようになります。
ここでは、2番目に大きいエンベロープで遊んだ後、ステップを繰り返しました。