创建重复的自定义径向渐变的简单方法?

平面设计 adobe-photoshop 坡度 工作流程 自动化
2022-02-07 09:12:28

我想在 Photoshop 中为渐变叠加效果创建一个简单的重复渐变。我不得不手动创建这个:

有没有一种更简单的方法可以通过设计一个小图案然后从中推断来制作重复图案?如果没有办法在渐变编辑器中设计这样的渐变,有没有办法模拟它(样式设置为径向)?

2个回答

创建一个新层,并将以下代码作为脚本执行。它将创建一个具有 0% 填充和新渐变作为叠加层的新图层样式。朝向底部的 for 循环在前景色中创建 21 级渐变。每隔一站就会在不透明和透明之间交替。

然后,您可以将渐变保存为“图层样式”菜单中的预设。

var idsetd = charIDToTypeID( "setd" );
    var desc120 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref29 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref29.putEnumerated( idLyr, idOrdn, idTrgt );
    desc120.putReference( idnull, ref29 );
    var idT = charIDToTypeID( "T   " );
        var desc121 = new ActionDescriptor();
        var idfillOpacity = stringIDToTypeID( "fillOpacity" );
        var idPrc = charIDToTypeID( "#Prc" );
        desc121.putUnitDouble( idfillOpacity, idPrc, 0.000000 );
        var idLefx = charIDToTypeID( "Lefx" );
            var desc122 = new ActionDescriptor();
            var idScl = charIDToTypeID( "Scl " );
            var idPrc = charIDToTypeID( "#Prc" );
            desc122.putUnitDouble( idScl, idPrc, 100.000000 );
            var idGrFl = charIDToTypeID( "GrFl" );
                var desc123 = new ActionDescriptor();
                var idenab = charIDToTypeID( "enab" );
                desc123.putBoolean( idenab, true );
                var idMd = charIDToTypeID( "Md  " );
                var idBlnM = charIDToTypeID( "BlnM" );
                var idNrml = charIDToTypeID( "Nrml" );
                desc123.putEnumerated( idMd, idBlnM, idNrml );
                var idOpct = charIDToTypeID( "Opct" );
                var idPrc = charIDToTypeID( "#Prc" );
                desc123.putUnitDouble( idOpct, idPrc, 100.000000 );

                //Gradient Definition
                var idGrad = charIDToTypeID( "Grad" );
                        var desc34 = new ActionDescriptor();
                        var idNm = charIDToTypeID( "Nm  " );
                        desc34.putString( idNm, "Custom" );
                        var idGrdF = charIDToTypeID( "GrdF" );
                        var idGrdF = charIDToTypeID( "GrdF" );
                        var idCstS = charIDToTypeID( "CstS" );
                        desc34.putEnumerated( idGrdF, idGrdF, idCstS );
                        var idIntr = charIDToTypeID( "Intr" );
                        desc34.putDouble( idIntr, 4096.000000 );
                        var idClrs = charIDToTypeID( "Clrs" );
                            var list5 = new ActionList();
                                var desc35 = new ActionDescriptor();
                                var idType = charIDToTypeID( "Type" );
                                var idClry = charIDToTypeID( "Clry" );
                                var idFrgC = charIDToTypeID( "FrgC" );
                                desc35.putEnumerated( idType, idClry, idFrgC );
                                var idLctn = charIDToTypeID( "Lctn" );
                                desc35.putInteger( idLctn, 0 );
                                var idMdpn = charIDToTypeID( "Mdpn" );
                                desc35.putInteger( idMdpn, 50 );
                            var idClrt = charIDToTypeID( "Clrt" );
                            list5.putObject( idClrt, desc35 );
                                var desc38 = new ActionDescriptor();
                                var idType = charIDToTypeID( "Type" );
                                var idClry = charIDToTypeID( "Clry" );
                                var idFrgC = charIDToTypeID( "FrgC" );
                                desc38.putEnumerated( idType, idClry, idFrgC );
                                var idLctn = charIDToTypeID( "Lctn" );
                                desc38.putInteger( idLctn, 4096 );
                                var idMdpn = charIDToTypeID( "Mdpn" );
                                desc38.putInteger( idMdpn, 50 );
                            var idClrt = charIDToTypeID( "Clrt" );
                            list5.putObject( idClrt, desc38 );
                        desc34.putList( idClrs, list5 );

                        // Gradient Stops
                        var idTrns = charIDToTypeID( "Trns" );
                            var list6 = new ActionList();
                                // Create 21 stops
                                for (i = 0; i < 22; i++){
                                    var desc39 = new ActionDescriptor();
                                    var idOpct = charIDToTypeID( "Opct" );
                                    var idPrc = charIDToTypeID( "#Prc" );
                                    // Alternate opacity from 100 to 0 every other stop
                                    desc39.putUnitDouble( idOpct, idPrc, 100.000000 * ((i+1)%2) );
                                    var idLctn = charIDToTypeID( "Lctn" );
                                    // Distribute stops evenly from 0 to 4096
                                    desc39.putInteger( idLctn, 4096 * (i/20));
                                    var idMdpn = charIDToTypeID( "Mdpn" );
                                    // Set midpoint halfway between stops
                                    desc39.putInteger( idMdpn, 50 );
                                    var idTrnS = charIDToTypeID( "TrnS" );
                                    list6.putObject( idTrnS, desc39 );
                                }
                        desc34.putList( idTrns, list6 );
                var idGrdn = charIDToTypeID( "Grdn" );
                desc123.putObject( idGrad, idGrdn, desc124 );
                var idAngl = charIDToTypeID( "Angl" );
                var idAng = charIDToTypeID( "#Ang" );
                desc123.putUnitDouble( idAngl, idAng, 90.000000 );
                var idType = charIDToTypeID( "Type" );
                var idGrdT = charIDToTypeID( "GrdT" );
                var idLnr = charIDToTypeID( "Rdl " );
                desc123.putEnumerated( idType, idGrdT, idLnr );
                var idRvrs = charIDToTypeID( "Rvrs" );
                desc123.putBoolean( idRvrs, false );
                var idAlgn = charIDToTypeID( "Algn" );
                desc123.putBoolean( idAlgn, true );
                var idScl = charIDToTypeID( "Scl " );
                var idPrc = charIDToTypeID( "#Prc" );
                desc123.putUnitDouble( idScl, idPrc, 100.000000 );
                var idOfst = charIDToTypeID( "Ofst" );
                    var desc154 = new ActionDescriptor();
                    var idHrzn = charIDToTypeID( "Hrzn" );
                    var idPrc = charIDToTypeID( "#Prc" );
                    desc154.putUnitDouble( idHrzn, idPrc, 0.000000 );
                    var idVrtc = charIDToTypeID( "Vrtc" );
                    var idPrc = charIDToTypeID( "#Prc" );
                    desc154.putUnitDouble( idVrtc, idPrc, 0.000000 );
                var idPnt = charIDToTypeID( "Pnt " );
                desc123.putObject( idOfst, idPnt, desc154 );
            var idGrFl = charIDToTypeID( "GrFl" );
            desc122.putObject( idGrFl, idGrFl, desc123 );
        var idLefx = charIDToTypeID( "Lefx" );
        desc121.putObject( idLefx, idLefx, desc122 );
    var idLyr = charIDToTypeID( "Lyr " );
    desc120.putObject( idT, idLyr, desc121 );
executeAction( idsetd, desc120, DialogModes.NO );

玩转这些值,我认为您会发现它非常有用。这是一个简单的例子:

在此处输入图像描述

使用 Illustrator 编写渐变脚本要简单得多。但是,当然,您不能在 Photoshop 中操纵(或动画,或...)渐变。将以下内容保存到.js文件并运行File > Scripts > Other Script...

// Create a color 
var startColor = new RGBColor();
startColor.red = 0;
startColor.green = 0;
startColor.blue = 0;

// Create a new gradient
// A new gradient always has 2 stops
var newGradient = app.activeDocument.gradients.add();
// Name the gradient to be the current time in POSIX
newGradient.name = new Date().getTime().toString();
newGradient.type = GradientType.RADIAL;

// Insert a number of intermediate stops. Here, 17.
for (i=0; i < 18; i += 1) {
   newGradient.gradientStops.add();
}

for (var i = 0; i < newGradient.gradientStops.length; i++){
    // Distribute each stop equally from 0 to 100
    newGradient.gradientStops[i].rampPoint = i * (100/(newGradient.gradientStops.length-1));
    // Each Midpoint is halfway to the next
    newGradient.gradientStops[i].midPoint = 50;
    // All colors are startColor
    newGradient.gradientStops[i].color = startColor;
    // Alternate the opacity between 0 and 100
    newGradient.gradientStops[i].opacity = ((i + 1) % 2) * 100;
}

它创建一个像这样的渐变: 在此处输入图像描述

使用插画家

第 1 步:圆圈

使用Polar Grid Tool可以轻松创建“同心圆”形状启用该工具,并Click在文档中的任何位置显示该工具的选项。我正在使用以下值:

极地网格工具选项

5 个同心分隔线将为我们创建 6 个均匀分布的圆圈:

戒指

现在,对于渐变部分。这在最近的版本 (CS6+) 中更容易,因为它们为笔画引入了渐变。在早期版本中,我们可以使用艺术画笔,但过程相当笨拙。

步骤 2a:对于 CS6+

我没有 CS6,所以我无法准确地向您展示如何设置它,但我可以为您指明正确的方向。按照 Scott在此处的说明对笔画应用渐变您需要更改它,以便在笔划上应用渐变这是我在下面圈出的按钮:

CS6渐变面板

这应该适用于 CS6+。

步骤 2b:对于 CS5 及以下

  1. 创建一个正方形,将所需的渐变应用到它作为填充
  2. 使用扩展渐变Object → Expand
  3. 删除展开组中的剪贴蒙版
  4. 选择渐变组,从中创建一个新的艺术画笔
  5. 将您的艺术画笔涂抹在所有戒指上

我一直缺少这些说明,希望你有 CS6,所以如果有任何不清楚的地方,请随时要求澄清

第 3 步:将其导入 Photoshop

根据您使用的渐变,您应该最终得到类似的结果:

最后的艺术

将其保存File → Place到您的 Photoshop 文档中,您就完成了。