Wie bekomme ich ein Illustrator-Skript, um die sichtbare Größe der beschnittenen Grafik anstelle der Originalgröße der Grafik anzuzeigen?

Wenn ich ein Illustrator-Skript verwende, das sichtbare Grenzen oder Auswahlgröße für beschnittene Grafiken verwendet, sieht das Skript die ursprüngliche Größe der beschnittenen Grafiken als Gruppengröße und nicht als sichtbare (beschnittene) Größe. Nehmen wir an, ich habe ein 150mm x 200mmBild und verwende eine Schnittmaske, um einen 100mm x 100mmTeil auszuschneiden. Jetzt sehe ich also ein Rechteck 100mm x 100mmund füge dann einige andere Elemente hinzu – es wird nicht größer als 100mm x 100mm. Dann möchte ich mit dieser Größe arbeiten, nicht mit der Größe des Originalbildes.

Wie kann man dies im Skript implementieren, um weiter damit zu arbeiten? Ich verwende Illustrator CS5.

Ändert das Aktivieren von "Use Preview Bounds" in den Einstellungen etwas?

Antworten (3)

Solange es sich bei der beschnittenen Grafik um eine Vektorgrafik handelt (im Gegensatz zu einem Rasterbild), können Sie sie verwenden Object > Expand appearance, um die abgeschnittenen Teile tatsächlich zu löschen. Daher sieht das Skript die Originalgrafik nicht mehr und funktioniert nicht mehr richtig.

Sie müssen die geometrischen Grenzen aus dem tatsächlichen Beschneidungspfadelement abrufen. es ist das erste Pfadelement in einer Schnittgruppe.

Eine Clipping-Gruppe ist im Grunde ein GroupItemwith clipped: trueund eines der Elemente innerhalb dieser Gruppe wird clipping: true.

Schauen Sie sich dieses Skript an:

function getVisibleBounds(item, geometric) {
    var bounds;

    // `clipped` is a property of a group
    if (item.typename = "GroupItem" && item.clipped) {
        var clippingItem;

        // look at all the items in the group to find the clipping item
        for (var i = 0; i < item.pageItems.length; i++) {

            // a child item will have `clipping` property set
            if (item.pageItems[i].clipping) {

                // found the clipping item!
                clippingItem = item.pageItems[i];
                break;

            // do the same thing for CompoundPathItems
            } else if (item.pageItems[i].typename == "CompoundPathItem") {
                if (item.pageItems[i].pathItems[0].clipping) {
                    clippingItem = item.pageItems[i];
                    break;
                }
            }
        }
        // store the clipping item's bounds
        bounds = geometric ? clippingItem.geometricBounds : clippingItem.visibleBounds;
    } else {

        // or just a normal item
        bounds = geometric ? item.geometricBounds : item.visibleBounds;
    }
    return bounds;
}