選択した配置画像をマスクするスクリプト
Illustratorでは配置画像を選択し、⌘ + 7キーで同じ大きさでマスクされます。実行直後はパスが選択されていますので、バウンディングボックスを調整してトリミングできます。
配置画像の複数のときにも同様に処理されますが、複数のときにはパスでなく、クリップグループが選択されるのが理想です。
ChatGPTに頼んで書いてもらいました。
#target illustrator
function main() {
var doc = app.activeDocument;
var createdRects = [];
// 選択されたすべてのオブジェクトに対してループ
for (var i = 0; i < app.selection.length; i++) {
var selectedItem = app.selection[i];
// クリッピングマスクの場合、マスクを解除してパスを削除
if (selectedItem.typename === "GroupItem" && selectedItem.clipped) {
releaseClippingMask(selectedItem);
}
}
// クリッピングマスクを解除した後の選択範囲に対して再度ループ
for (var i = 0; i < app.selection.length; i++) {
var selectedItem = app.selection[i];
// 画像が選択されている場合、クリッピングマスクを作成
if (selectedItem.typename === "PlacedItem" || selectedItem.typename === "RasterItem") {
var rect = createClippingMask(selectedItem);
createdRects.push(rect);
}
}
// 選択状態の更新
updateSelection(createdRects);
}
function releaseClippingMask(groupItem) {
var clippingPath = groupItem.pageItems[0];
groupItem.clipped = false;
clippingPath.remove();
ungroup(groupItem);
}
function createClippingMask(imageItem) {
var doc = app.activeDocument;
var rect = doc.pathItems.rectangle(imageItem.top, imageItem.left, imageItem.width, imageItem.height);
var group = doc.groupItems.add();
imageItem.moveToBeginning(group);
rect.moveToBeginning(group);
group.clipped = true;
return rect;
}
function ungroup(groupItem) {
while (groupItem.pageItems.length > 0) {
groupItem.pageItems[0].moveToBeginning(groupItem.layer);
}
groupItem.remove();
}
function updateSelection(rects) {
var doc = app.activeDocument;
doc.selection = null;
for (var i = 0; i < rects.length; i++) {
rects[i].parent.selected = true;
}
}
main();
すでにクリッピングマスクが適用されている場合にはクリッピングマスクを解除し、パスを削除、残った配置された画像または埋め込み画像も対象にします。
パスとパスは対象外なので、オリジナルのクリッピングマスクと併用してください。
グラフィックスタイルの適用
クリップグループに対してグラフィックスタイルを与えるとき、クリッピングマスク適用後にオブジェクトを選択し直す必要がありました。
ついつい忘れて「あれ?」となるペインポイントが解消されます。
クリップグループにしておけば、円にしたり、黒い塗りを追加し、描画モードを「色相」に設定してグレースケール化するなど、自由度が増します。
少し前まで次のような手間をかけていましたが、不要になりました。
Photoshopでモノクロ化
Illustratorで(マスク用の)正円を描画
選択した配置画像の短辺と同じ長さの正方形でマスクする
「正方形でマスクしたい」場合にも対応できるようにしました。
中身はこんな感じ。
#target illustrator
function main() {
var doc = app.activeDocument;
var selectedItems = app.selection;
var createdGroups = [];
for (var i = 0; i < selectedItems.length; i++) {
var item = selectedItems[i];
// クリッピングマスクの処理
if (item.typename === 'GroupItem' && item.clipped) {
item.clipped = false;
var itemsToProcess = [];
for (var j = item.pageItems.length - 1; j >= 0; j--) {
var pageItem = item.pageItems[j];
if (pageItem.typename === 'PlacedItem' || pageItem.typename === 'RasterItem') {
itemsToProcess.push(pageItem);
} else {
pageItem.remove();
}
}
// 解除したクリッピングマスク内の画像を処理
for (var k = 0; k < itemsToProcess.length; k++) {
var imageItem = itemsToProcess[k];
processImage(imageItem, createdGroups);
}
}
// 配置された画像または埋め込み画像の処理
else if (item.typename === 'PlacedItem' || item.typename === 'RasterItem') {
processImage(item, createdGroups);
}
}
// 画像処理関数
function processImage(image, groups) {
var bounds = image.visibleBounds; // 画像の境界を取得
var width = bounds[2] - bounds[0];
var height = bounds[1] - bounds[3];
var sideLength = Math.min(width, height);
var centerX = bounds[0] + width / 2;
var centerY = bounds[1] - height / 2;
var square = doc.pathItems.rectangle(centerY + sideLength / 2, centerX - sideLength / 2, sideLength, sideLength);
var group = doc.groupItems.add();
image.moveToBeginning(group);
square.moveToBeginning(group);
group.clipped = true;
groups.push(group);
}
// 選択をクリア
doc.selection = null;
// 選択対象の処理
if (createdGroups.length === 1) {
createdGroups[0].pageItems[1].selected = true; // 対応するパスを選択
} else {
for (var l = 0; l < createdGroups.length; l++) {
createdGroups[l].selected = true; // すべてのクリッピンググループを選択
}
}
}
main();
ChatGPTチャット
ChatGPTのチャットのログ
https://chat.openai.com/share/f1c0aa35-f87b-42e8-84ba-139006e3da40
ファイル名
スクリプトをファイル化するとき、面倒なのがファイル名です。これもChatGPTに提案してもらうとよいでしょう。
番外編
マスクを解除するとき、中身だけにする/パスだけにするスクリプトは、Gorolib Designさんが公開されています。
むっちゃ重宝します!!
ダウンロード
スクリプトファイル
Keyboard Maestroマクロ
Illustratorファイル
ここから先は
DTP Transit 定期購読マガジン
マガジン限定記事やサンプルファイルをダウンロードできます。
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5