Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Sichtbarkeit eines Bildes prüfen

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 09:10
Bewertung:

gelesen: 4789

Beitrag als Lesezeichen
Hallo liebe Skripter,

ich hab hier ein Mini-Skript wo ich auf den Fehler leider nicht draufkomme:
Folgende Situation:
Es soll geprüft werden ob das aktuelle Bild sichtbar ist.

Sichtbar heißt für mich: Das Bild wurde direkt ausgeblendet oder es liegt auf einer ausgeblendeten Ebene.

Leider gibt mir der Code immer ein falsches Alert, also wenn das Bild sichtbar ist gibt er keine Meldung, wenn es unsichtbar ist gibt er es als sichtbar aus. Wo liegt der Fehler?

Code
var doc = app.documents[0];  
var allGraphics = doc.allGraphics;

for(var n=0;n<allGraphics.length;n++)
{



if((allGraphics[n].itemLink.name =="Bild1.tif") &&
(allGraphics[n].visible == false))

{

alert ("Das Bild: "+allGraphics[n].itemLink.name + " ist nicht sichtbar" )

}
};


Habt ihr eine Idee? Vielen Dank

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 09:32
Bewertung:

gelesen: 4770

Beitrag als Lesezeichen
Moin Faxinger,

probiere es mal so:
Code
var doc = app.documents[0];   
var allGraphics = doc.allGraphics;

for(var n=0;n<allGraphics.length;n++)
{



if((allGraphics[n].itemLink.name =="Bild1.tif") &&
(!(allGraphics[n].visible)))

{

alert ("Das Bild: "+allGraphics[n].itemLink.name + " ist nicht sichtbar" )

}
};

Dein Vergleich:
(false == false) -> true!

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 10:18
Bewertung:

gelesen: 4731

Beitrag als Lesezeichen
Hallo Werner,

danke für den Hinweis. Aber leider ist das Ergebnis dasselbe.

Egal ob das Bild eingeblendet ist oder nicht: Mit NOT bekomme ich keine Meldung, Ohne NOT die Meldung dass das Bild nicht sichtbar ist. Das ist doch verkehrt rum oder?

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 10:37
Bewertung:

gelesen: 4720

Beitrag als Lesezeichen
Hallo Faxinger,

Bei mir funktioniert Folgendes:
Code
x.visible = true; 
if ((true) && (!(x.visible)))
alert("not visible");
else
alert("visible");
x.visible = false;
if ((true) && (!(x.visible)))
alert("not visible");
else
alert("visible");


x ist eine Gruppe,
(true) ersetzt (allGraphics[n].itemLink.name =="Bild1.tif")

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 10:51
Bewertung:

gelesen: 4716

Beitrag als Lesezeichen
Hallo Werner,

ich habs jetzt noch einfacher versucht, nur ein Bild ausgeblendetund die Abfrage nach dem Bildnamen weggelassen:
Code
 

var doc = app.documents[0];
var allGraphics = doc.allGraphics;

for(var n=0;n<allGraphics.length;n++)
{
if (!(allGraphics[n].visible))
{

alert ("Das Bild: "+allGraphics[n].itemLink.name + " ist nicht sichtbar" )
}
};


Also liegt es nicht an der && Abfrage was zuerst meine Vermutung war.
Leider funktioniert auch diese Abfrage nicht richtig. :-(

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 10:58
Bewertung:

gelesen: 4707

Beitrag als Lesezeichen
Hallo Faxinger,

Nur auf Visible testen:

if (!(bild.visible))
alert("not visible");

Probiere doch mal:
Code
var doc = app.documents[0];   
var allGraphics = doc.allGraphics;

for(var n=0;n<allGraphics.length;n++)
{
if (!(allGraphics[n].visible))
{

alert (allGraphics[n].visible)
}
};

Was siehst Du?

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 11:05
Bewertung:

gelesen: 4696

Beitrag als Lesezeichen
Hallo Werner,

ich habe jetzt ein neues Dokument mit einer Seite, einer Ebene, und einem Bild auf der Seite.

Ich blende das Bild aus, lass deinen Code laufen. "Ergebnis undefined" in der Console, kein alert.

Ich blende das Bild ein, lass deinen Code laufen.
"Ergebnis undefined" in der Console, kein alert.

Wenn ich das NOT wegnehme erhalte ich als alert "true", auch hier unabhängig davon ob das Bild ein- oder ausgeblendet ist.

(Dieser Beitrag wurde von faxinger666 am 15. Apr 2021, 11:18 geändert)

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 11:19
Bewertung:

gelesen: 4666

Beitrag als Lesezeichen
Hallo Faxinger,

Du schaffst mich! :-)

Code
var doc = app.documents[0];    
var allGraphics = doc.allGraphics;

for(var n=0;n<allGraphics.length;n++)
{
allGraphics[n].visible = false;
if (!(allGraphics[n].visible))
{

alert (allGraphics[n].visible)
}
};


liefert bei mir das erwartete Ergebnis.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 11:27
Bewertung:

gelesen: 4664

Beitrag als Lesezeichen
Es ist immer hilfreich, den verwendeten Code im Beitrag zu wiederholen, ich habe jetzt enfach mal den Überblick verloren.

Eingeblendetes Bild.visible -> true
Ausgeblendetes Bild.visibile -> false

Wird natürlich nur angezeigt, wenn Dein if es zulässt.

Zitat Ich blende das Bild ein, lass deinen Code laufen.
"Ergebnis undefined" in der Console


Das ist das Ergebnis des Skriptes und völlig korrekt, weil das Skript kein Ergebnis liefert.

Verwende zur Kontrolle auf jeden Fall auch das "else".

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 11:35
Bewertung:

gelesen: 4653

Beitrag als Lesezeichen
Hallo Werner, sorry aber ich kapier es nicht:

Dein Code blendet das Bild aus, als alert erhalte ich "false".

In der Ebenenpalette hat aber das Bildobjekt das Auge sichtbar.

Jetzt sehe ich den Wald vor lauter Bäumen nicht mehr.

Ich glaube ich hab da was falsch verstanden von der Umsetzung her. Bedeutet "visible" nicht, dass das Objekt in der Ebenenpalette eingeblendet ist? Sind das 2 verschiedene Herangehensweisen? Man kann ja ein Objekt direkt ausblenden (command 3) oder über die Ebenenpalette. Bewirkt das nicht das selbe? Ich wollte testen ob das Objekt in der Ebenenpalette ausgeblendet ist, ging davon aus nicht sichtbar weil man es ja auch tatsächlich nicht sieht.

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 11:46
Bewertung:

gelesen: 4640

Beitrag als Lesezeichen
Es kommen wir auf den Punkt, verwende die Property pageItem.itemLayer.visible.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 12:37
Bewertung:

gelesen: 4616

Beitrag als Lesezeichen
Hallo Werner, vielen Dank für deine Antwort. Ja wir nähern uns, allerdings bin ich noch nicht dort wo ich hin will :-)

Das Skript mit der Abfrage des itemlayers funktioniert nur insofern dass es richtig ausgibt sobald die gesamte Ebene ausgeblendet ist, nicht aber wenn nur das Bild auf der Unterebene ausgeblendet ist und die hierarchisch darüber liegende Ebene eingeblendet ist.
Struktur: Ebene 1, auf Ebene 1 liegt das Bild.
Ebene 1 und Bild ausgeblendet: funktioniert.
Ebene 1 und Bild eingeblendet: funktioniert.
Ebene 1 eingeblendet, Bild ausgeblendet: funktioniert nicht.
Ebene 1 ausgeblendet, Bild eingeblendet: funktioniert nicht.

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 13:00
Bewertung:

gelesen: 4586

Beitrag als Lesezeichen
Hallo Faxinger,

ich denke, es wird Zeit, dass Du mal eine Beispieldatei zur Verfügung stellst.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 13:13
Bewertung:

gelesen: 4543

Beitrag als Lesezeichen
Zitat Hallo Werner, vielen Dank für deine Antwort. Ja wir nähern uns, allerdings bin ich noch nicht dort wo ich hin will :-)

Ergänzend zu meinen letzen Beitrag, manchmal hilft ein wenig Nachdenken :-):
1. es gibt keine Sublayers
2. muss die Eigenschaft als im Objekt liegen.
3. die direkte Abfrage des Objektes funltioniert nicht, also ist die Eigenschaft mit dem Objekt verbunden, daraus folgt:
Suche das Objekt auf der Ebene:
object.itemLayer.objects.itemByID(object.id).visible sollte die gewünschte Information enthalten.

Wirklich spannend wird es allerdings, wenn sich Dein Objekt tief verschachtelt in einer Gruppe befindet.

Das wäre dann aber etwas für Fortgeschrittene -> rekursive Programmierung.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

Uwe Laubender
Beiträge gesamt: 5318

15. Apr 2021, 13:14
Bewertung: |||

gelesen: 4543

Beitrag als Lesezeichen
Hallo Jungs,
wie wäre es mal mit Durchatmen?
Oooom…

Zur Verwirrung:

Spezialfälle:
[1] Grafikrahmen der Abbildung ist in Übersatztext.
[2] Grafikrahmen ist Teil eines nicht aktiven Status ( Schaltfläche, MSO etc. )
[3] Grafik ist innerhalb des Grafikrahmens so verschoben, dass kein Teil von ihr zu sehen ist.
[4] Ein Transparenteffekt macht die Grafik unsichtbar.
[5] Die Grafik wird durche ein Element verdeckt.

Allgemein gilt:

Eine Grafik kann nur dann sichtbar sein, wenn die ihr übergeordnete Struktur sichtbar ist.
Also der Grafikrahmen beispielsweise. Oder die Gruppe, deren Teil der Grafikrahmen ist. Oder der Textrahmen, in dem der Grafikrahmen verankert ist.


Mal die Spezialfälle nicht geprüft, könnte das ein möglicher Ansatz sein:

Code
 
/*
HINWEIS:
Grafiken auf Musterseiten werden NICHT untersucht, da zunächst die Ebenen geprüft werden.

*/

var doc = app.documents[0];
var layers = doc.layers.everyItem().getElements();

var invisibleGraphics = [];

for( var n=0; n<layers.length; n++ )
{
// Keine Grafiken auf der Ebene? Weiter in der Schleife.
var allGraphicsOnLayer = layers[n].allGraphics;
if( allGraphicsOnLayer.length == 0 ){ continue };

// Ist die EBENE unsichtbar?
// Alle Grafiken der Ebene dem Resultat-Array hinzufügen.
// Dann weiter in der Schleife.
if( layers[n].visible == false )
{
invisibleGraphics = invisibleGraphics.concat( allGraphicsOnLayer );
continue
};

// Die einzelnen Elemente der Ebene und deren allGraphics array untersuchen:
var itemsOfLayer = layers[n].pageItems.everyItem().getElements();

for( var i =0; i<itemsOfLayer.length; i++ )
{
// Keine Grafiken im Element? Weiter in der Schleife.
if( itemsOfLayer[i].allGraphics.length == 0 ){ continue };

// Ist das Element unsichtbar, dann sind auch alle Grafiken im Element unsichtbar.
// Also alle Grafiken dem Ergebnis-Array hinzufügen und weiter in der Schleife.
if( itemsOfLayer[i].visible == false )
{
invisibleGraphics = invisibleGraphics.concat( itemsOfLayer[i].allGraphics );
continue;
};

// Weiter geht's mit der Einzeluntersuchung:
// Grafiken innerhalb von Elementen, die sichtbar sind:
var allGraphicsInItem = itemsOfLayer[i].allGraphics;

for( var g=0; g<allGraphicsInItem.length; g++ )
{
if( allGraphicsInItem[g].visible == false )
{
invisibleGraphics[invisibleGraphics.length++] = allGraphicsInItem[g];
};
};

};

};

alert( "Anzahl unsichtbarer Grafiken: " + invisibleGraphics.length );

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

Sichtbarkeit eines Bildes prüfen

Uwe Laubender
Beiträge gesamt: 5318

15. Apr 2021, 13:42
Bewertung:

gelesen: 2517

Beitrag als Lesezeichen
Hinweis:
[1] Grafikrahmen der Abbildung ist in Übersatztext.

Lässt sich so prüfen:

Code
var allGraphicsInDoc = app.documents[0].allGraphics; 
var graphicInOversetText = [];

for( var n=0; n<allGraphicsInDoc.length; n++ )
{
try{ allGraphicsInDoc[n].geometricBounds }
catch(e)
{
graphicInOversetText[ graphicInOversetText.length++ ] =
allGraphicsInDoc[n];
}
};

alert( "Anzahl der Grafiken in Übersatz: " + graphicinOversetText.length );

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

(Dieser Beitrag wurde von Uwe Laubender am 15. Apr 2021, 13:43 geändert)

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2762

15. Apr 2021, 13:44
Bewertung:

gelesen: 2516

Beitrag als Lesezeichen
Moin Uwe,

:-)

Nicht zu vergessen:

Ist der Rechner eingeschaltet?
Ist InDesign geladen?
Ist eine Datei geöffnet?
Ist die Datei sichtbar?
Ist die Datei aktiv?
Ist die Seite sichtbar?
Reicht der Zoomfaktor?
Schaut der Anwender auf den Rechner?

Und dabei hatte Faxinger ursprünglich doch nur gefragt. wie man mit einer Und-Bedingung umgeht. :-)

Meistens steckt also das eigentlich Problem in der Frage.

Uwe, Du hast auf jeden Fall mal wieder die ganze Problematik einer vermeintlich einfachen Frage aufgezeigt.

Danke, hättest Du Dich doch nur schon um 9:35 Uhr zu Wort gemeldet.

Gruß
Werner

der mal wieder auch der Suche nach einem verschwunden Vieableninhalt ist.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

Sichtbarkeit eines Bildes prüfen

Uwe Laubender
Beiträge gesamt: 5318

15. Apr 2021, 13:54
Bewertung:

gelesen: 2506

Beitrag als Lesezeichen
Hallo Werner,
die Prüfung nach den geometricBounds einer Grafik sollte man in jedem Fall in mein obiges Skript noch einfügen. Für jede Grafik, die in einem sichtbaren Element steckt. Weshalb? Es könnten auch Tabellenzellen mit Grafiken überlaufen.

:-)
*****
Mit herzlichem Gruß,
Uwe Laubender

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 14:41
Bewertung:

gelesen: 2491

Beitrag als Lesezeichen
Hallo Uwe, hallo Werner!
Danke für eure Beiträge. Keine Angst Uwe, alles im grünen Bereich, wir sind ganz entspannt. :-)

Mir war nicht bewusst, dass die Sichtbarkeit eines Objektes in diesem Fall eine Ebeneneigenschaft ist und nicht eine Eigenschaft des Objektes obwohl es ja beides gibt.


@Uwe: Ich werde deinen Code mal testen. Deine von dir erwähnten Spezialfälle sind mir bewusst, treten aber in meinem Beispiel nicht auf. Es geht immer darum ob die übergeordnete Struktur sichtbar ist. Es gibt keine unterschiedlichen Status, keine Verschiebungen oder Verdeckungen oder sonstigen Transparenzeffekte oder auch Verankerungen in Textfeldern. Es geht lediglich darum ob das Bild innerhalb der Ebenenpalette auf sichtbar oder unsichtbar gestellt wurde.

Danke nochmals ganz herzlich für eure Beiträge. LG faxinger

Sichtbarkeit eines Bildes prüfen

Uwe Laubender
Beiträge gesamt: 5318

15. Apr 2021, 15:24
Bewertung:

gelesen: 2478

Beitrag als Lesezeichen
Zitat von faxinger Mir war nicht bewusst, dass die Sichtbarkeit eines Objektes in diesem Fall eine Ebeneneigenschaft ist und nicht eine Eigenschaft des Objektes obwohl es ja beides gibt.


Äh. Diesen Satz würde ich so nicht unterschreiben; oder formulieren.

Die Sichtbarkeit eines Objekts kann zunächst mal eine von der Eigenschaft visible unabhängige Geschichte sein. Siehe auch meinen Ausnahmen-Katalog.

Wie ich bereits geschrieben habe:

Es kommt primär auf die Sichtbarkeit der übergeordneten Struktur an.
Wenn diese gewährleistet ist, kann man das einzelne Objekt untersuchen.
Auch deshalb prüfe ich layer.pageItem.allGraphics, um einer möglichen Verschachtelung Herr zu werden.

Man könnte natürlich auch mit doc.pageItems beginnen und auch pageItem.itemLayer.visible neben pageItem.visible prüfen.
Da wären dann die Musterseiten automatisch einbezogen. Falls Du nur den sichtbaren Druckbogen auswerten wolltest, ob eine Grafik zu sehen ist, müssten wir mit app.documents[0].layoutWindows[0].activeSpread.pageItems beginnen und, je nach Zielsetzung, auch die angewendeten Musterseitenelemente noch hinzuziehen.
*****
Mit herzlichem Gruß,
Uwe Laubender

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 16:26
Bewertung:

gelesen: 2433

Beitrag als Lesezeichen
Hallo Uwe,

ja genau darum ging es mir auch. Wenn ich das Bildobjekt in der Ebenenpalette und nur dieses ausblende, dann ist auch eine etwaig vorhandene Struktur (Bild in Rahmen in Rahmen in Rahmen) nicht mehr sichtbar.

Mein Fall ist ja prinzipiell ganz einfach: Ist das Bild in der Ebenenpalette ausgeblendet worden, soll mir das Skript sagen dass es ausgeblendet ist. Wenn nicht dann nicht. Ohne Berücksichtigung eventueller Fälle, die natürlich sein könnten. Aber das war nicht das Ziel, hier alle möglichen Konstruktionen mit zu berücksichtigen.

Natürlich könnte ich auch noch prüfen ob das Bild überhaupt im Dokument vorhanden ist etc. Das ist aber alles nicht notwendig.

Danke
LG
faxinger

Sichtbarkeit eines Bildes prüfen

Uwe Laubender
Beiträge gesamt: 5318

15. Apr 2021, 20:11
Bewertung:

gelesen: 2396

Beitrag als Lesezeichen
Hallo faxinger,
Du sprichst immer von "dem Bild".

Falls "das Bild" im Verknüpfungen-Bedienfeld gelistet ist und Du möchtest wissen, ob das nun ausgeblendet ist, musst Du nur die Verknüpfung des Bildes dort auswählen und die Funktion "Gehe zu Verknüpfung" anwenden.

Im Falle eines ausgeblendeten Bildes wird Dich InDesign per Infokasten davon in Kenntnis setzen, dass das Bild sich entweder auf einer ausgeblendeten Ebene befindet oder dass es selbst ausgeblendet ist.
*****
Mit herzlichem Gruß,
Uwe Laubender

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

16. Apr 2021, 08:36
Bewertung:

gelesen: 2336

Beitrag als Lesezeichen
Hallo Uwe,

danke für deinen Antwort.

Die Tatsache ob das Bild eingeblendet ist oder nicht soll im weiteren Verlauf des Skriptes dann verwendet werden.
Also der Wert true oder false wird dann ausgewertet und hat Auswirkungen wie das Skript dann weiterarbeitet.
Das Nachsehen im Verknüpfungsbedienfeld ist mir natürlich bekannt.

Danke
LG
faxinger