QQ登录

只需一步,快速开始

查看: 261|回复: 8
收起左侧

Illustrator 画板适合对象(需要支持蒙版)脚本

[复制链接]
累计签到:3 天
连续签到:1 天
发表于 2025-3-14 08:23:12 | 显示全部楼层 |阅读模式
我编写了一个画板适合对象脚本,想让脚本适合蒙版,哪位大神帮看看,谢谢了!


/*

Artboard To Selection
Copyright 2022 William Campbell
All Rights Reserved
https://www.marspremedia.com/contact

Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

*/

(function () {

    var defaults = {
        margin: 30,
        // units: "像素"
        // units: "点"
        // units: "派克"
        // units: "英寸"
        units: "毫米"
        // units: "厘米"
    };

    var title = "Artboard To Selection";

    if (!/Illustrator/i.test(app.name)) {
        alert("Script for Illustrator", title, false);
        return;
    }

    // Script variables.
    var doc;
    var measurementUnits;
    var measurementUnitsShort;

    // Reusable UI variables.
    var g; // group
    var p; // panel
    var w; // window

    // Permanent UI variables.
    var btnCancel;
    var btnOk;
    var inpMargin;
    var listUnits;

    // SETUP

    measurementUnits = [
        "像素",
        "点",
        "派克",
        "英寸",
        "毫米",
        "厘米"
    ];
    measurementUnitsShort = [
        "px",
        "pt",
        "pc",
        "in",
        "mm",
        "cm"
    ];

    // Script requires open document.
    if (!app.documents.length) {
        alert("打开文档", title, false);
        return;
    }
    doc = app.activeDocument;
    // Need at least one element selected.
    if (!doc.selection[0]) {
        alert("Select something", title, false);
        return;
    }
    // Script doesn't work in Isolation Mode.
    if (doc.layers[0].name == "隔离模式") {
        alert("Exit Isolation Mode before running script", title, false);
        return;
    }

    // CREATE USER INTERFACE

    w = new Window("dialog", title);
    w.alignChildren = "fill";
    // Panel.
    p = w.add("panel");
    p.alignChildren = "left";
    g = p.add("group");
    g.add("statictext", undefined, "出血:");
    inpMargin = g.add("edittext");
    inpMargin.preferredSize.width = 50;
    listUnits = g.add("dropdownlist", undefined, measurementUnits);
    listUnits.preferredSize.width = 100;

    // Action Buttons.
    g = w.add("group");
    g.alignment = "center";
    btnCancel = g.add("button", undefined, "取消");
    btnOk = g.add("button", undefined, "确定");
    // Panel Copyright.
    p = w.add("panel");
    p.add("statictext", undefined, "Copyright 2022 William Campbell");

    // SET UI VALUES

    inpMargin.text = defaults.margin;
    listUnits.selection = listUnits.find(defaults.units) || 0;
    listUnits.priorIndex = listUnits.selection.index;

    // UI ELEMENT EVENT HANDLERS

    inpMargin.onChange = function () {
        validateFloat(this);
    };

    listUnits.onChange = function () {
        var index;
        var mu1;
        var mu2;
        var convert = function (uiEdit) {
            if (/,/.test(uiEdit.text)) {
                // Has comma: appears decimal comma.
                // Replace comma with point, then restore comma.
                uiEdit.text = String(parseFloat(UnitValue(Number(uiEdit.text.replace(",", ".")), mu1).as(mu2).toFixed(4))).replace(".", ",");
            } else {
                // Default: decimal point.
                uiEdit.text = String(parseFloat(UnitValue(Number(uiEdit.text), mu1).as(mu2).toFixed(4)));
            }
        };
        index = this.selection.index;
        if (index != this.priorIndex) {
            // Units have changed.
            mu1 = measurementUnitsShort[this.priorIndex];
            mu2 = measurementUnitsShort[index];
            convert(inpMargin);
        }
        this.priorIndex = index;
    };

    btnOk.onClick = function () {
        w.close(1);
    };

    btnCancel.onClick = function () {
        w.close(0);
    };

    // DISPLAY THE DIALOG

    if (w.show() == 1) {
        try {
            process();
        } catch (e) {
            alert("An error has occurred.\nLine " + e.line + ": " + e.message, title, true);
        }
    }

    //====================================================================
    //               END PROGRAM EXECUTION, BEGIN FUNCTIONS
    //====================================================================

    function process() {
        var artboard;
        var docScaleFactor;
        var padding;
        var vb;

        docScaleFactor = doc.scaleFactor || 1;
        padding = valueAsPoints(inpMargin, listUnits) / docScaleFactor;

        // Get the bounds of the selected items considering masks
        vb = getBoundsWithMask(doc.selection);

        artboard = doc.artboards[doc.artboards.getActiveArtboardIndex()];
        artboard.artboardRect = [
            vb[0] - padding,
            vb[1] + padding,
            vb[2] + padding,
            vb[3] - padding
        ];
    }

    function validateFloat(uiEdit) {
        var s;
        var v;
        // Remove non-digits.
        s = uiEdit.text.replace(/[^0-9.]/g, "");
        if (s != uiEdit.text) {
            alert("Numeric input only.\nNon-numeric characters removed.", " ", false);
        }
        // No more than one decimal point.
        s = s.replace(/\.{2,}/g, ".");
        v = parseFloat(s) || 0;
        uiEdit.text = v.toString();
    }

    function valueAsPoints(uiEdit, uiList) {
        var mu;
        var v;
        mu = measurementUnitsShort[uiList.selection.index];
        v = parseFloat(uiEdit.text) || 0;
        return UnitValue(v, mu).as("pt");
    }

    // Function to get the bounds of selected items considering masks
    function getBoundsWithMask(selectedItems) {
        var allItems = [];
        for (var i = 0; i < selectedItems.length; i++) {
            var item = selectedItems[i];
            if (item.typename === "GroupItem" && item.clipped) {
                var groupItems = item.pageItems;
                for (var j = 0; j < groupItems.length; j++) {
                    allItems.push(groupItems[j]);
                }
            } else {
                allItems.push(item);
            }
        }

        // Initialize bounds
        var minX = Infinity;
        var minY = Infinity;
        var maxX = -Infinity;
        var maxY = -Infinity;

        // Calculate bounds
        for (var k = 0; k < allItems.length; k++) {
            var bounds = allItems[k].geometricBounds;
            minX = Math.min(minX, bounds[0]);
            minY = Math.min(minY, bounds[1]);
            maxX = Math.max(maxX, bounds[2]);
            maxY = Math.max(maxY, bounds[3]);
        }

        return [minX, minY, maxX, maxY];
    }

})();

更多图片 小图 大图
组图打开中,请稍候......

华印网相关搜索

累计签到:1155 天
连续签到:9 天
发表于 2025-3-14 10:10:25 | 显示全部楼层
帮你改好了,拿去用吧
更多图片 小图 大图
组图打开中,请稍候......

画板适合对象(支持蒙版).rar

2.22 KB, 下载次数: 14

回复 支持 反对 送花

使用道具 举报

累计签到:97 天
连续签到:2 天
发表于 2025-3-14 10:18:40 | 显示全部楼层
这个我也需要,下了试下看好不好用!先谢谢了
回复 支持 反对 送花

使用道具 举报

累计签到:1155 天
连续签到:9 天
发表于 2025-3-14 10:37:17 | 显示全部楼层
mxliuxing 发表于 2025-3-14 10:10
帮你改好了,拿去用吧

适合纯蒙版录屏
更多图片 小图 大图
组图打开中,请稍候......
回复 支持 反对 送花

使用道具 举报

累计签到:97 天
连续签到:2 天
发表于 2025-3-14 10:52:38 | 显示全部楼层
mxliuxing 发表于 2025-3-14 10:10
帮你改好了,拿去用吧

默认出血30,能不能改一下,我拼版出血3就够了,每次用都要重新输入数字,比较麻烦
回复 支持 反对 送花

使用道具 举报

累计签到:1155 天
连续签到:9 天
发表于 2025-3-14 11:03:55 | 显示全部楼层
hongcailh 发表于 2025-3-14 10:52
默认出血30,能不能改一下,我拼版出血3就够了,每次用都要重新输入数字,比较麻烦 ...

默认输入边距3mm:画板适合对象(支持蒙版-3mm)

画板适合对象(支持蒙版-3mm).rar

2.23 KB, 下载次数: 11

回复 支持 反对 送花

使用道具 举报

累计签到:97 天
连续签到:2 天
发表于 2025-3-14 11:21:33 | 显示全部楼层
mxliuxing 发表于 2025-3-14 11:03
默认输入边距3mm:画板适合对象(支持蒙版-3mm)

太感谢了,我先试用下,这样应该就方便多了!
回复 支持 反对 送花

使用道具 举报

累计签到:3 天
连续签到:1 天
 楼主| 发表于 2025-3-14 16:31:10 | 显示全部楼层
mxliuxing 发表于 2025-3-14 10:10
帮你改好了,拿去用吧

技术不错啊! Illustrator 画板适合对象(需要支持蒙版)脚本{tag}(1)
回复 支持 反对 送花

使用道具 举报

累计签到:97 天
连续签到:2 天
发表于 2025-3-17 15:31:08 | 显示全部楼层
昨天用软件试了下,单纯的带蒙版图片是可以的,如果是蒙版图片和文字(或其它图形)再群组一起的话就无效,希望能修改下,谢谢
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

注意注意注意:必看上一条 /1 下一条

华印网 - 华印社区
Share More 周一至周日:09:00 - 21:00
华印网旗下的设计印刷制作类专业技术站点
请勿发布违反国家法律法规的内容,会员观点不代表本站立场
企鹅群号:119572101

华印网汇集印前印后技术、PDF拼版、防伪包装、数码印刷、合版印刷、图文设计、平面设计、数码印刷及CTP等最新印刷技术,提供软件汉化、插件汉化、cdr插件、ai插件、ps插件、pdf插件、印刷流程、ctp输出、印刷软件、印能捷、esko、CorelDRAW、InDesign、Illustrator、CTP、CDR以及PDF软件下载的综合性印刷论坛社区!

Powered by Discuz! X3.4 © 2001-2021,Tencent Cloud.

站点地图|小黑屋|手机版|Archiver|华印 ( 粤ICP备19020152号-1 )

GMT+8, 2025-4-2 06:00 , Processed in 0.139151 second(s), 31 queries , Gzip On, Yac On.

快速回复 返回顶部 返回列表