[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Sichtbarkeit eines Bildes prüfen

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

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 09:10
Beitrag # 1 von 23
Bewertung:
(4767 mal gelesen)
URL zum Beitrag
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
X

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 09:32
Beitrag # 2 von 23
Beitrag ID: #579521
Bewertung:
(4748 mal gelesen)
URL zum Beitrag
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!


als Antwort auf: [#579520]

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 10:18
Beitrag # 3 von 23
Beitrag ID: #579522
Bewertung:
(4709 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#579521]

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 10:37
Beitrag # 4 von 23
Beitrag ID: #579523
Bewertung:
(4698 mal gelesen)
URL zum Beitrag
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")


als Antwort auf: [#579522]

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 10:51
Beitrag # 5 von 23
Beitrag ID: #579524
Bewertung:
(4694 mal gelesen)
URL zum Beitrag
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. :-(


als Antwort auf: [#579523]

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 10:58
Beitrag # 6 von 23
Beitrag ID: #579525
Bewertung:
(4685 mal gelesen)
URL zum Beitrag
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?


als Antwort auf: [#579524]

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 11:05
Beitrag # 7 von 23
Beitrag ID: #579526
Bewertung:
(4674 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#579525]
(Dieser Beitrag wurde von faxinger666 am 15. Apr 2021, 11:18 geändert)

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 11:19
Beitrag # 8 von 23
Beitrag ID: #579527
Bewertung:
(4644 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#579526]

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 11:27
Beitrag # 9 von 23
Beitrag ID: #579528
Bewertung:
(4642 mal gelesen)
URL zum Beitrag
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".


als Antwort auf: [#579526]

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 11:35
Beitrag # 10 von 23
Beitrag ID: #579529
Bewertung:
(4631 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#579527]

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 11:46
Beitrag # 11 von 23
Beitrag ID: #579530
Bewertung:
(4618 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Es kommen wir auf den Punkt, verwende die Property pageItem.itemLayer.visible.


als Antwort auf: [#579529]

Sichtbarkeit eines Bildes prüfen

faxinger666
Beiträge gesamt: 167

15. Apr 2021, 12:37
Beitrag # 12 von 23
Beitrag ID: #579533
Bewertung:
(4594 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#579530]

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 13:00
Beitrag # 13 von 23
Beitrag ID: #579534
Bewertung:
(4564 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Faxinger,

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


als Antwort auf: [#579533]

Sichtbarkeit eines Bildes prüfen

WernerPerplies
Beiträge gesamt: 2760

15. Apr 2021, 13:13
Beitrag # 14 von 23
Beitrag ID: #579535
Bewertung:
(4521 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#579533]

Sichtbarkeit eines Bildes prüfen

Uwe Laubender
Beiträge gesamt: 5316

15. Apr 2021, 13:14
Beitrag # 15 von 23
Beitrag ID: #579536
Bewertung: |||
(4521 mal gelesen)
URL zum Beitrag
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 );



als Antwort auf: [#579529]
X