小华同学 发表于 2025-3-14 16:27:12

Illustrator 2024 提取所有图片(带蒙版)到新图层的脚本

大佬帮把这个改下,这个脚本提取图片到新图层,蒙版被释放了,帮改成蒙版不要释放。
#target illustrator
var doc = app.activeDocument;
var newLayer = doc.layers.add();
newLayer.name = "图片";

var itemsToMove = [];
var maskInfo = [];

// 遍历文档中的所有页面项
for (var i = 0; i < doc.pageItems.length; i++) {
    var item = doc.pageItems;

    // 提取嵌入/链接图片
    if (item.typename === "PlacedItem" || item.typename === "RasterItem") {
      itemsToMove.push(item);
    }

    // 提取包含剪切蒙版的编组
    if (item.typename === "GroupItem" && item.clipped) {
      itemsToMove.push(item);
      var currentMaskInfo = {
            mask: null,
            maskedItems: []
      };
      for (var j = 0; j < item.pageItems.length; j++) {
            var subItem = item.pageItems;
            if (subItem.isMask) {
                currentMaskInfo.mask = subItem;
            } else {
                currentMaskInfo.maskedItems.push(subItem);
            }
      }
      maskInfo.push(currentMaskInfo);
    }
}

// 移动符合条件的元素到新图层
for (var k = 0; k < itemsToMove.length; k++) {
    var targetItem = itemsToMove;
    targetItem.move(newLayer, ElementPlacement.PLACEATEND);
}

// 在新图层中重新应用剪切蒙版
for (var l = 0; l < maskInfo.length; l++) {
    var currentInfo = maskInfo;
    var newGroup = newLayer.groupItems.add();

    // 移动蒙版到新组
    if (currentInfo.mask) {
      currentInfo.mask.move(newGroup, ElementPlacement.PLACEATSTART);
      currentInfo.mask.isMask = true;
    }

    // 移动被蒙版的对象到新组
    for (var m = 0; m < currentInfo.maskedItems.length; m++) {
      currentInfo.maskedItems.move(newGroup, ElementPlacement.PLACEATEND);
    }

    // 应用剪切蒙版
    if (newGroup.pageItems.length >= 2) {
      newGroup.clipped = true;
    }
}

alert("已提取 " + itemsToMove.length + " 个对象到新图层,并重新应用剪切蒙版!");
页: [1]
查看完整版本: Illustrator 2024 提取所有图片(带蒙版)到新图层的脚本