火曜日, 9月 23, 2025

JavaScriptでAI遊び 69 
Illustratorで指定サイズ内にランダムな矩形生成(RGB版)

指定したサイズ内にランダムな矩形を敷き詰めます。RGB版ですが、CMYKモードでも機能します。

#target illustrator

function randomColor() {
return [Math.random() * 255, Math.random() *
255, Math.random() * 255];
}

function main() {
if (app.documents.length == 0) {
alert("ドキュメントを開いてください。");
return;
}

var doc = app.activeDocument;

// 入力ダイアログでサイズを取得
var w = Number(prompt("全体の幅 (mm)", "150"));
var h = Number(prompt("全体の高さ (mm)", "150"));
if (isNaN(w) || isNaN(h) || w <= 0 || h <= 0) {
alert("正しい数値を入力してください。");
return;
}

// mm → pt変換
var mmToPt = 2.834645;
var totalWidth = w * mmToPt;
var totalHeight = h * mmToPt;

var startX = 0;
var startY = 0;

while (startY < totalHeight) {
var remainingHeight = totalHeight - startY;
var rowHeight =
Math.min(remainingHeight, (Math.random() *
remainingHeight * 0.5) + 10);

var currentX = 0;
while (currentX < totalWidth) {
var remainingWidth = totalWidth - currentX;
var rectWidth =
Math.min(remainingWidth, (Math.random() *
remainingWidth * 0.5) + 10);

// ランダムカラー
var rgb = randomColor();
var rect = doc.pathItems.rectangle(
-startY, // y位置(上がマイナス)
currentX, // x位置
rectWidth,
rowHeight
);
rect.filled = true;
rect.fillColor =
makeRGBColor(rgb[0], rgb[1], rgb[2]);
rect.stroked = false;

currentX += rectWidth;
}

startY += rowHeight;
}
}

function makeRGBColor(r, g, b) {
var c = new RGBColor();
c.red = r;
c.green = g;
c.blue = b;
return c;
}

main();

実行すると敷き詰める矩形のサイズを指定します。

処理結果。