如何在 Illustrator 和 Photoshop 中多次重复渐变?

平面设计 adobe-photoshop adobe-illustrator 坡度 Photoshop脚本 插画脚本
2022-01-21 04:00:00

如何重复渐变“n”次,例如,重复黑白渐变 5 次(沿笔划路径),就像我在下面的示例图像中手动完成的那样。

有没有一种方法可以自动将其乘以“n”倍,例如 50 或 100,而无需手动复制渐变滑块?

梯度手动重复多次

4个回答

使用脚本!

正如其他人所回答的那样,您应该使用脚本。但是这里的一些其他解决方案只使用 RGB,而我的使用您从文档中选择的颜色。还有一些解决方案在环绕点没有产生均匀的颜色,或者有太多和/或重叠的渐变停止,所以我的脚本解决了这些问题。

要使用它,请选择 2 个或更多填充了渐变颜色的路径,然后在提示时输入重复渐变的次数。

http://pastie.org/10924009

编辑:馅饼网站不工作,所以我已经包括下面的代码:

// 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文件:

示例 1

示例 2:3 种颜色渐变,6​​ 次重复:

示例 2

示例 3:RGB 文档,6 种颜色,20 次重复。注意填充路径是如何重叠的?该堆叠顺序(从前到后)决定了渐变中颜色的顺序。

示例 3

更改渐变中的颜色:选择应用渐变的路径,然后选择色板面板弹出菜单 → 添加所选颜色。新的全局色板将添加到色板面板中,当您编辑一个时,它会随处更新。

示例 4

您可以使用 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,因此无法测试。

  1. 设置一个填充了要重复的渐变的矩形。

在此处输入图像描述

  1. 使用变换效果(效果→扭曲和变换→变换...)复制您的矩形。将水平移动设置为矩形的宽度,并根据需要设置尽可能多的副本。

在此处输入图像描述

  1. 展开变换效果(对象 → 展开外观)。

  2. 您不能在画笔中使用渐变,因此您需要扩展渐变(对象 → 扩展),在“扩展渐变到”下选择要扩展的对象数量。

    扩展渐变会在扩展渐变中留下一些剪贴蒙版,您需要遍历图层并删除它们(或保持右键单击并“取消组合”然后“释放剪贴蒙版”直到没有更多蒙版)。

在此处输入图像描述

  1. 将展开的渐变拖到画笔面板并选择“艺术画笔”。画笔的默认选项很可能没问题,所以只需点击“确定”。您可以随时返回并稍后调整画笔选项。

  2. 应用你的新刷子。

在此处输入图像描述

根据 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 次。我们有三十站。我们使用 遍历所有颜色jj变为 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

一些例子:

具有两种颜色的渐变,重复两次: 在此处输入图像描述

具有五种颜色的渐变,重复 10 次: 在此处输入图像描述

具有两种颜色的渐变,重复 50 次: 在此处输入图像描述

50 种颜色重复 50 次的惊人渐变: 在此处输入图像描述