2色間のグラデーションを指定ステップ数の矩形に分割します。CMYK版。グラデーションは2色間であれば線形、円形のどちらでも問題ありませんが、フリーグラデーションには未対応です。
function mmToPoints(mm) {
return mm * 2.83465; // 1 mm ≈ 2.83465 pt
}
function interpolateCMYK(c1, c2, t) {
var color = new CMYKColor();
color.cyan = c1.cyan + (c2.cyan - c1.cyan) * t;
color.magenta = c1.magenta + (c2.magenta - c1.magenta) * t;
color.yellow = c1.yellow + (c2.yellow - c1.yellow) * t;
color.black = c1.black + (c2.black - c1.black) * t;
return color;
}
function createCMYKGradientStepsScaled() {
if (app.documents.length === 0) {
alert("ドキュメントを開いてください。");
return;
}
var doc = app.activeDocument;
var selection = doc.selection;
if (selection.length !== 1 || selection[0].typename !==
"PathItem" || !selection[0].filled || selection[0].
fillColor.typename !== "GradientColor") {
alert("1つのCMYKグラデーション塗りのオブジェクトを
選択してください。");
return;
}
var gradient = selection[0].fillColor.gradient;
if (gradient.gradientStops.length < 2) {
alert("グラデーションに2つ以上の色が必要です。");
return;
}
var steps = parseInt(prompt("分割するステップ数を入力:", "10"), 10);
if (isNaN(steps) || steps < 2) {
alert("2以上の整数を入力してください。");
return;
}
var totalWidthMM =
parseFloat(prompt("全体の幅(mm)を入力:", "100"));
var totalHeightMM =
parseFloat(prompt("全体の高さ(mm)を入力:", "50"));
if (isNaN(totalWidthMM) || isNaN(totalHeightMM) ||
totalWidthMM <= 0 || totalHeightMM <= 0) {
alert("正しい数値を入力してください。");
return;
}
var totalWidth = mmToPoints(totalWidthMM);
var totalHeight = mmToPoints(totalHeightMM);
var rectWidth = totalWidth / steps;
var rectHeight = totalHeight;
var artboard =
doc.artboards[doc.artboards.getActiveArtboardIndex()];
var artboardBounds = artboard.artboardRect;
var centerX = (artboardBounds[0] + artboardBounds[2]) / 2;
var centerY = (artboardBounds[1] + artboardBounds[3]) / 2;
var startX = centerX - totalWidth / 2;
var startY = centerY + totalHeight / 2;
for (var i = 0; i < steps; i++) {
var t = i / (steps - 1);
// グラデーションストップ間の色を計算
var lowerIndex = 0;
var upperIndex = gradient.gradientStops.length - 1;
for (var j = 0; j < gradient.gradientStops.length - 1; j++) {
if (t >= gradient.gradientStops[j].rampPoint / 100 && t <=
gradient.gradientStops[j + 1].rampPoint / 100) {
lowerIndex = j;
upperIndex = j + 1;
break;
}
}
var tLerp =
(t - gradient.gradientStops[lowerIndex].rampPoint / 100) /
((gradient.gradientStops[upperIndex].rampPoint / 100) -
(gradient.gradientStops[lowerIndex].rampPoint / 100));
var fillColor =
interpolateCMYK(gradient.gradientStops[lowerIndex].color,
gradient.gradientStops[upperIndex].color, tLerp);
var rect = doc.pathItems.rectangle(startY, startX + i *
rectWidth, rectWidth, rectHeight);
rect.filled = true;
rect.fillColor = fillColor;
rect.stroked = false;
}
}
createCMYKGradientStepsScaled();
グラデーションを設定したオブジェクトを選択して実行すると・・・
サイズとステップ数を指定します。サイズは全体のサイズになります。

結果の配置は中央です。