如何在 Illustrator 和 Photoshop 中多次重复渐变?
使用脚本!
正如其他人所回答的那样,您应该使用脚本。但是这里的一些其他解决方案只使用 RGB,而我的使用您从文档中选择的颜色。还有一些解决方案在环绕点没有产生均匀的颜色,或者有太多和/或重叠的渐变停止,所以我的脚本解决了这些问题。
要使用它,请选择 2 个或更多填充了渐变颜色的路径,然后在提示时输入重复渐变的次数。
编辑:馅饼网站不工作,所以我已经包括下面的代码:
// 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,因此无法测试。
- 设置一个填充了要重复的渐变的矩形。
- 使用变换效果(效果→扭曲和变换→变换...)复制您的矩形。将水平移动设置为矩形的宽度,并根据需要设置尽可能多的副本。
展开变换效果(对象 → 展开外观)。
您不能在画笔中使用渐变,因此您需要扩展渐变(对象 → 扩展),在“扩展渐变到”下选择要扩展的对象数量。
扩展渐变会在扩展渐变中留下一些剪贴蒙版,您需要遍历图层并删除它们(或保持右键单击并“取消组合”然后“释放剪贴蒙版”直到没有更多蒙版)。
将展开的渐变拖到画笔面板并选择“艺术画笔”。画笔的默认选项很可能没问题,所以只需点击“确定”。您可以随时返回并稍后调整画笔选项。
应用你的新刷子。
根据 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
一些例子: