土曜日, 9月 27, 2025

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

指定したサイズ内にランダムな矩形を敷き詰めます。CMYK版ですが、RGBモードでも機能します。ちなみにCMYK版ではBlackは未使用で処理しています。

#target illustrator

function randomCMYKColor() {
var cmyk = new CMYKColor();
cmyk.cyan = Math.random() * 100;
cmyk.magenta = Math.random() * 100;
cmyk.yellow = Math.random() * 100;
cmyk.black = Math.random() * 0;
return cmyk;
}

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;
}

var mmToPt = 2.834645;
var totalWidth = w * mmToPt;
var totalHeight = h * mmToPt;

var startX = 0;
var startY = 0;

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

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

var rect = doc.pathItems.rectangle(
-startY, // Y位置(Illustratorでは上がマイナス)
currentX, // X位置
rectWidth, // 幅
rowHeight // 高さ
);
rect.filled = true;
rect.fillColor = randomCMYKColor();
rect.stroked = false;

currentX += rectWidth;
}

startY += rowHeight;
}
}

main();

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

処理結果。