金曜日, 9月 11, 2026

JavaScriptでAI遊び 106 
Illustratorで選択したオブジェクトを数と比率を指定してランダム複製・配置

Illustratorで選択したオブジェクトを数と比率を指定してランダム複製・配置します。
また、処理結果はアートボードからはみ出すことはありません。

// 選択オブジェクトをランダム複製・配置
// アートボード内に収める
if (app.documents.length == 0) {
alert("ドキュメントを開いてください。");
} else {
var doc = app.activeDocument;
var sel = doc.selection;
if (sel.length == 0) {
alert("オブジェクトを選択してください。");
} else {
var count = Number(prompt("複製数", "30"));
if (isNaN(count) || count < 1) exit();
var minScale = Number(prompt("最小倍率(%)", "50"));
var maxScale = Number(prompt("最大倍率(%)", "150"));
if (isNaN(minScale) || isNaN(maxScale)) exit();
var ab = doc.artboards[
doc.artboards.getActiveArtboardIndex()
].artboardRect;
var left = ab[0];
var top = ab[1];
var right = ab[2];
var bottom = ab[3];
for (var c = 0; c < count; c++) {
for (var i = 0; i < sel.length; i++) {
var obj = sel[i].duplicate();
// ランダム倍率
var scale = minScale + Math.random() * (maxScale - minScale);
obj.resize(
scale,
scale,
true,
true,
true,
true
);
// ランダム回転
obj.rotate(Math.random() * 360);
// サイズ取得
var b = obj.visibleBounds;
var w = b[2] - b[0];
var h = b[1] - b[3];
// アートボードより大きい場合は削除
if (w > (right - left) || h > (top - bottom)) {
obj.remove();
continue;
}
// ランダム位置
var x = left + Math.random() * ((right - left) - w);
var y = top - Math.random() * ((top - bottom) - h);
obj.translate(
x - b[0],
y - b[1]
);
}
}
doc.selection = null;
alert("完了");
}
}

任意のオブジェクトを選択してか実行すると・・・

数を設定(デフォルトは30)し

最小倍率(デフォルトは50)を設定し

最大倍率(デフォルトは150)を設定すれば・・・

直ぐに完了します。

処理結果はアートボード内にランダム配置されます。

※Illustratorのアップデートで不具合が出る場合があります。気がついた時点でデバッグするように心がけていますが、すぐに対応できないのでご容赦ください。