[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Objekte löschen anhand einer Farbe

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 233

31. Mai 2019, 11:23
Beitrag # 1 von 57
Bewertung:
(4174 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum,

ich bitte euch wieder mal um eure Mithilfe.

Mein Ziel ist:
Ich habe ein Dokument mit einer Doppelseite oder Einzelseite (das kann von Dokument zu Dokument variieren) und mehreren Ebenen. In diesem Dokument sollen alle Elemente (Polygone) die mit 100 % Yellow gefüllt sind gelöscht werden.

Nur ist mir nicht klar wie ich diese Elemente auswählen könnte. Das Gelb ist zwar in den Farbfeldern definiert, hat aber keinen "richtigen" Namen sondern nur die Farbwerte als Namen.



Habt ihr eine Idee?

Vielen Dank.
LG faxinger
X

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

31. Mai 2019, 12:35
Beitrag # 2 von 57
Beitrag ID: #570467
Bewertung:
(4151 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat Nur ist mir nicht klar wie ich diese Elemente auswählen könnte. Das Gelb ist zwar in den Farbfeldern definiert, hat aber keinen "richtigen" Namen sondern nur die Farbwerte als Namen.

Das was Du siehst, ist der Name, also wo genau ist Dein Problem?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570465]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 233

31. Mai 2019, 13:38
Beitrag # 3 von 57
Beitrag ID: #570468
Bewertung:
(4136 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Werner,

ich habe mich geirrt, ich muss nur alle Polygone auswählen und löschen unabhängig von der Farbe.

Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.
Also alle Polygone auf allen Seiten und allen Ebenen.
Ich habe zwar schon etwas Code aber der funktioniert schon von der Auswahl her nicht:
Code
var _dok= app.activeDocument; 

var _polys = _dok.polygons.everyItem().getElements();
alert (_polys.length);



if(!_polys.parentPage == null){_polys.remove()};


Bitte um kurze Antwort.

Danke
LG
faxinger


als Antwort auf: [#570467]
(Dieser Beitrag wurde von faxinger am 31. Mai 2019, 13:40 geändert)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

31. Mai 2019, 14:12
Beitrag # 4 von 57
Beitrag ID: #570469
Bewertung:
(4124 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Bitte,

also dann vielleicht so:
Code
main(); 

function main() {
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
allPolygons.push(pIs[i]);
}
}
alert(allPolygons.length);
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o)
{
try
{
if (typeof(o) != "object")
{
var r = (typeof o ).toString().split("");
r[0] = r[0].toUpperCase();
return r.join("");
}
var constructorName = o.constructor.name;
if (!("getElements" in o))
return constructorName;
while (constructorName != o.getElements()[0].constructor.name)
{
if (!("getElements" in o))
break;
o = o.getElements()[0];
constructorName = o.constructor.name;
}
return constructorName;
}
catch (error)
{
if (error.number == 21)
return "Null";
// throw wpsHandleError(error, $.stack, "wpsInnerConstructorName");
// throw error;
}
}
}


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570468]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 233

31. Mai 2019, 14:20
Beitrag # 5 von 57
Beitrag ID: #570470
Bewertung:
(4115 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Werner,

aber leider funktioniert das Skript nicht. Es werden keine polygone gelöscht.

Die anzahl der Polygone wird ausgegeben.

LG
faxinger


als Antwort auf: [#570469]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

31. Mai 2019, 14:34
Beitrag # 6 von 57
Beitrag ID: #570471
Bewertung:
(4105 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Darauf habe ich Dir geantwortet:

Zitat Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.


löschen müsste so funktionieren:
Code
... 
for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
pIs[i].remove();
}
}
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570470]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5740

31. Mai 2019, 20:34
Beitrag # 7 von 57
Beitrag ID: #570472
Bewertung: ||
(4031 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Antwort auf: Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.

Versuche es bitte mal damit:

Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=nPolys-1; p>-1; p--) {
allPolys[p].remove();
}

Auch mit diesem Einzeiler sollte es klappen:

Code
app.documents[0].polygons.everyItem().remove(); 

Voraussetzungen: Die Objekte sind nicht gruppiert. Weder Ebenen noch Objekte sind gesperrt.

Gruss, Hans


als Antwort auf: [#570470]
(Dieser Beitrag wurde von Hans Haesler am 1. Jun 2019, 08:03 geändert)

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 233

3. Jun 2019, 09:06
Beitrag # 8 von 57
Beitrag ID: #570489
Bewertung:
(2951 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Werner,

vielen Dank für eure Antworten. Ich muss gestehen dass mir der Einzeiler bzw. das Kurzscript von Hans besser gefällt, da ich dabei auch navollziehen kann was genau passiert, was ich bei Werners Script leider nicht kann. Das ist für mich zu hoch. ;-)

Es ist zwar schön etwas Einblick in die Hohe Kunst des JS zu bekommen, aber Verständnis geht für mich vor.

Danke für eure Bemühungen.

@Hans: Die Variable runterzuzählen in der for-Schleife hat wahrscheinlich den Grund das Objekte gelöscht werden und somit die Anzahl der zu löschenenden Objekte bei jedem Durchgang kleiner wird, oder?

LG
faxinger


als Antwort auf: [#570472]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5740

3. Jun 2019, 09:39
Beitrag # 9 von 57
Beitrag ID: #570491
Bewertung: ||
(2942 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

bitte sehr. Und Deine Auslegung ist richtig.

Wenn die Schleife durch den Array vorwärts läuft ...

Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=0; p<nPolys; p++) {
allPolys[p].remove();
}

... kommt eine Fehlermeldung, wenn mehr als ein Polygon vorhanden ist.

Angenommen, im Dokument sind drei Polygons:
– Beim ersten Durchgang wird ein Polygon entfernt. Es verbleiben zwei.
– Beim zweiten Durchgang wird eines davon entfernt. Es verbleibt eines.
– Beim dritten Durchgang versucht das Script das dritte Polygon (von dreien) zu löschen.
Aber das gelingt nicht, weil nur noch eines vorhanden ist.

Bitte ausprobieren!

*****
Wenn die Schleife rückwärts läuft, muss als Startwert die Anzahl Objekte minus eins verwendet werden, weil das letzte Objekt mit "0" adressiert wird:
– Durchgang 1: lösche Objekt 2;
– Durchgang 2: lösche Objekt 1;
– Durchgang 3: lösche Objekt 0;

Also nochmals:
Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=nPolys-1; p>-1; p--) {
allPolys[p].remove();
}

Gruss, Hans


als Antwort auf: [#570489]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

3. Jun 2019, 10:58
Beitrag # 10 von 57
Beitrag ID: #570492
Bewertung:
(2924 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

jetzt muss ich doch mal nachfragen:

Hans Beispiel zeigt wirklich alle Polygone einer Datei an?

Bei meiner Beispieldatei gilt:

Hans Methode: 3

Meine Methode: 40!

Und Du fragtest doch nach allen Polygonen, oder?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570489]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 233

3. Jun 2019, 17:20
Beitrag # 11 von 57
Beitrag ID: #570504
Bewertung:
(2873 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

du hast Recht, mit deiner Methode bekomme ich mehr Ergebnisse.

Aber ich bin zu blöd den "Löschcode" richtig einzusetzen.

Code
for (var i = 0; i < l; i++){  
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
pIs[i].remove();
}
}


Ersetzt dieser Code den Code ?:
Code
     for (var i = 0; i < l; i++){  
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
allPolygons.push(pIs[i]);
}
}


Falls ja hat das bei mir nicht geklappt.

Und wofür benötige ich den "InnerConstructionName"?


Danke
LG
faxinger


als Antwort auf: [#570492]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

3. Jun 2019, 17:35
Beitrag # 12 von 57
Beitrag ID: #570505
Bewertung:
(2864 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat du hast Recht, mit deiner Methode bekomme ich mehr Ergebnisse.

Ich weiß! :-)

Ich hätte jetzt gerne den Block zitiert, aber wieder einmal schafft das der Editor des Forums nicht.

Also Kurzfassung:

Ja, so müsste es eigentlich klappen:
Code
 allPolygons.push(pIs[i]);  wird durch pIs[i].remove(); 

ersetzt.

Was klappt denn nicht, wird ein Fehler geworfen?
Mit welchem Polygon klappt es nicht?

Zitat Und wofür benötige ich den "InnerConstructionName"?


In PageItem ist ein Sammelbegriff für Rectangles, Textframes, Polygons usw.

InnerConstructorName ermittelt den Typ des PageItems.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570504]
(Dieser Beitrag wurde von Gerald Singelmann am 7. Jun 2019, 12:19 geändert)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

4. Jun 2019, 06:18
Beitrag # 13 von 57
Beitrag ID: #570509
Bewertung:
(2804 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin faxinger,

ich habe es gereade noch einmal selbst ausprobiert, bei mir klappt alles wie gewünacht:
Code
function main() { 
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
// allPolygons.push(pIs[i]); // entkommentieren zur Ermittlung der Anzahl, kommentieren zum Löschen
// pIs[i].remove(); // kommentieren zur Ermittlung der Anzahl, entkommentieren zum Löschen
}
}
alert(allPolygons.length);
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o){
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570505]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2358

4. Jun 2019, 08:09
Beitrag # 14 von 57
Beitrag ID: #570510
Bewertung:
(2782 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und um auf das ursprüngliche Thema zurückzukommen:
Zitat Objekte löschen anhand einer Farbe

Code
main(); 

function main() {
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [], /*Array*/allPolygonsWithDefinedFillColor = [],
/*Array*/allPolygonsWithDefinedStrokeColor = [], /*Array*/deletedItems = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
// allPolygons.push(pIs[i]); // entkommentieren zur Ermittlung der Anzahl, kommentieren zum Löschen
// pIs[i].remove(); // kommentieren zur Ermittlung der Anzahl, entkommentieren zum Löschen
// allPolygonsWithDefinedFillColor.push(pIs[i].fillColor.name);
// allPolygonsWithDefinedStrokeColor.push(pIs[i].fillColor.name);
// Polygon mit einer bestimmten StrokeColor löschen
// detect collection of pIs[i].strokeColor:
if (pIs[i].strokeColor == app.activeDocument.colors.itemByName("Black"))
{
deletedItems.push(pIs[i].strokeColor.name);
pIs[i].remove();
}
}
}
// alert(allPolygons.length);
// alert(allPolygonsWithDefinedFillColor.join("\n"));
// alert(allPolygonsWithDefinedStrokeColor.join("\n"));
alert(deletedItems.join("\n"));
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o){
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570509]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 4478

4. Jun 2019, 10:35
Beitrag # 15 von 57
Beitrag ID: #570516
Bewertung:
(2763 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: … Und wofür benötige ich den "InnerConstructionName"? …


Hallo Faxinger,
wenn Du nach pageItems fahndest, bekommst Du pageItems zurück.
Die Oberklasse gewissermaßen von "Rectangles", "Ovals", "Polygons" etc.pp.

Willst Du nun wissen, was ein bestimmtes pageItems nun eigentlich ist, kannst Du das beispielsweise so machen:

Code
pageItem.getElements()[0] 


InDesign ist dann gezwungen genau nachzusehen, um was es sich handelt.
Also haben wir's mit einem Rechteck, Polygon etc.pp. zu tun.

Code
var doc = app.documents.add(); 
var objectOnPage = doc.rectangles.add({geometricBounds: [0,0,100,100]});

$.writeln( doc.pageItems[0] ); // [object PageItem]
$.writeln( doc.pageItems[0].getElements()[0] ); // [object Rectangle]

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#570504]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.
pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
17.09.2019 - 18.09.2019

Tag 1: Freistellen, Tag 2: Composing

Frankfurt/M
Dienstag, 17. Sept. 2019, 09.30 Uhr - Mittwoch, 18. Sept. 2019, 17.30 Uhr

Schulung, Seminar

Digitalfotos gekonnt aufbereiten, Produktfotos effizient freistellen, hochwertige Composings erstellen – für jede Anforderung bietet Photoshop ein Fülle von Werkzeugen und Techniken. Unserer zweitägige Schulung zeigt Ihnen ein Fülle von Arbeitstechniken, Tipps und Tricks. Eine Top-Schulung, die in den vergangenen Jahren fast immer ausgebucht war!

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/weiterbildung-zum-photoshop-composing-experten/

Weiterbildung zum Photoshop-Composing-Experten
Veranstaltungen
18.09.2019

Frankfurt/M
Mittwoch, 18. Sept. 2019, 09.30 Uhr

Schulung, Seminar

Auf den Titelseiten von Zeitschriften oder in Werbeanzeigen finden sich häufig aufwendige Bildretuschen, und oft fragt man sich: „Wie machen die das bloß?“ Unsere neue Photoshop-Schulung High-End-Bildretusche und High-End-Digital-Composing bringt Licht ins Dunkel und erläutert an vielen Praxisbeispielen, wie aus einfachen Digitalbildern packende Montagen entstehen.

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/schulungen/schulung-photoshop-composings/

High-End-Bildretusche und Composings