[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Farbmarkierung in Bridge für Bilder die in InDesign verwendet werden.

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

Farbmarkierung in Bridge für Bilder die in InDesign verwendet werden.

JuMayr
Beiträge gesamt: 96

21. Nov 2011, 17:35
Beitrag # 1 von 3
Bewertung:
(3553 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich habe mal wieder eine neue Herausforderung (zumindest für mich).
Bei der Gestaltung von Hochzeitsalben ziehe ich Bilder aus der Bridge in InDesign um dort Albendoppelseiten zu gestalten.

Nun hätte ich gerne, dass Bridge mir die Bilder farbig markiert die bereits im Album verwendet wurden.

Ich stelle es mir so vor, dass bei jeder Änderung an der Liste der verknüpften Bilder ein Event ausgelöst wird welches ein neu hinzugefügtes Bild z.B. rot markiert und wenn ein Bild in Indesign gelöscht wird, dann sollte die rote Markierung idealerweise auch wieder entfernt werden.

Geht sowas überhaupt?
Ist mein Denkansatz mit dem onChange bei Verknüpfungen sinnvoll?

Gruß
Jürgen
X

Farbmarkierung in Bridge für Bilder die in InDesign verwendet werden.

JuMayr
Beiträge gesamt: 96

2. Dez 2011, 23:49
Beitrag # 2 von 3
Beitrag ID: #485676
Bewertung:
(3468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier einmal der aktuelle Stand

Code
#target bridge 

var myRating = 3;
var myCollection = "Album";
var myLabel = "Auswählen"; //"Auswählen"; "Zweite Wahl"; "Genehmigt";"Betrachtung";""=ohne Zuweisung

var myDatei = String("C:\\DSC_1066.jpg");
var myThumb = new Thumbnail(File(myDatei));

//Rating des ersten Bildes ändern
myThumb.rating = myRating;

//Bild zu einer Collection hinzufügen
var myCollectionlist = app.getCollections();

//Wenn die Liste der Collections / Sammlungen leer ist, dann wird auf jeden Fall eine neue Collection mit dem Namen angelegt.
if (myCollectionlist.length == 0) {
myCollection = app.createCollection(myCollection);
myCollection.refresh();
myCollectionlist = app.getCollections();
}

//Wenn die Collectionliste nicht leer ist, dann wird die Liste nach dem Namen der gewünschten Collection durchsucht.
//Wird sie nicht gefunden, dann wird sie angelegt und das Bild hinzugefügt.
//Wird sie gefunden, dann wird das Bild hinzugefügt ohne eine neue Collection anzulegen. <-- hier klappt es noch nicht

for (var n = 0; n < myCollectionlist.length; n++) {
if (myCollectionlist[n].name.search( myCollection ) == -1) {
myCollection = app.createCollection(myCollection);
myCollection.refresh();
app.addCollectionMember (myCollection, myThumb);
} else {
myCollection = new Thumbnail(myCollection);
app.addCollectionMember (myCollection, myThumb);
myCollection.refresh();
}
}

//Label des Bildes ändern
myThumb.label = myLabel;



als Antwort auf: [#484874]

Farbmarkierung in Bridge für Bilder die in InDesign verwendet werden.

JuMayr
Beiträge gesamt: 96

17. Dez 2011, 11:08
Beitrag # 3 von 3
Beitrag ID: #486522
Bewertung:
(3366 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier die finale funktionsfähige Version. Vielleicht hat jemand Verwendung dafür. Vielen Dank an Gregor Fellenz für die Schubser in die richtige Richtung:)

Vielleicht braucht es mal jemand.

Das Script muss in die InDesign StartUp Scripts kopiert werden.
Nach dem Start von Bridge sollte dann im Menü ein neuer Eintrag AlbumPro erscheinen. Darin kann man die Funktion zum automatischen markieren der Bilder in Bridge aktivieren bzw. deaktivieren.
Beim Platzieren eines Bildes wird dieses dann automatisch mit einem Laben und/oder einem Rating versehen.
Beim Löschen wird das Laben und/oder Rating wieder entfernt.
Da der Eventhandler afterPlace gelegentlich nicht erkannt wird, habe ich beim Speichern & Speichern unter eine Art Refresh Funktion eingbaut die alle Bilder mit Labeln/Rating versieht.

Code
#targetengine AlbumPro 

var varXMLBridge_Label = "Auswählen";
var varXMLBridge_Rating = 5;

if (varXMLBridge_Label == "") {
varBridge_Label = undefined;
varBridge_Label_aktiv = false;
} else {
varBridge_Label = varXMLBridge_Label;
varBridge_Label_aktiv = true;
}

switch (varXMLBridge_Rating) {
case "0":
varBridge_Rating = 0;
varBridge_Rating_aktiv = true;
break;
case "1":
varBridge_Rating = 1;
varBridge_Rating_aktiv = true;
break;
case "2":
varBridge_Rating = 2;
varBridge_Rating_aktiv = true;
break;
case "3":
varBridge_Rating = 3;
varBridge_Rating_aktiv = true;
break;
case "4":
varBridge_Rating = 4;
varBridge_Rating_aktiv = true;
break;
case "5":
varBridge_Rating = 5;
varBridge_Rating_aktiv = true;
break;
default:
varBridge_Rating = undefined;
varBridge_Rating_aktiv = false;
break;
}

//Haupteintrag zur Navigation hinzufügen
var myAlbumProMenu = null;
try {
myAlbumProMenu = app.menus.item("$ID/Main").submenus.add("AlbumPro", LocationOptions.AFTER, app.menus.item("$ID/Main").submenus.item("$ID/kTablePanelTitle"));
}
catch (myError){
myAlbumProMenu = app.menus.item("$ID/Main").submenus.item("AlbumPro");
}

//Je nachdem, ob das aktive Dokument schon für die Bildmarkierung in Bridge aktiviert wurde oder nicht,
//wird ein entsprechender Menüeintrag hinzugefügt.
varDocumentLabel = "false";
if (app.documents.length > 0 ) {
varDocumentLabel = app.documents[0].extractLabel("AlbumProDocument");
if (varDocumentLabel == "") {
varDocumentLabel = "false"
}
}
if (varDocumentLabel != "true") {
// Submenüeintrag hinzufügen
var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge aktivieren");
myAlbumProMenu_entry.eventListeners.add("onInvoke", tagDocument);
myAlbumProMenu.menuItems.add(myAlbumProMenu_entry);
} else {
// Submenüeintrag hinzufügen
var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge deaktivieren");
myAlbumProMenu_entry.eventListeners.add("onInvoke", untagDocument);
myAlbumProMenu.menuItems.add(myAlbumProMenu_entry);
}


//~ var myAlbumProMenu_entry = app.scriptMenuActions.add("Bilder tauschen");
//~ myAlbumProMenu_entry.eventListeners.add("onInvoke", tagSwapImages);
//~ myAlbumProMenu.menuItems.add(myAlbumProMenu_entry);

//~ function tagSwapImages (myEvent) {
//~ if (app.documents.length > 0 ) {
//~ app.doScript(app.scriptPreferences.scriptsFolder+"/AlbumPro/bin/Swap_Images.jsxbin");
//~ }
//~ }

//tagDocument wird ausgeführt, wenn im Menü die Funktion "Bildmarkierung in Bridge aktivieren" ausgeführt wird.
//Änderung des Menüeintrags auf untagDocument
function tagDocument (myEvent) {
if (app.documents.length > 0 ) {
app.documents[0].insertLabel("AlbumProDocument", "true");

for (var i =0; i < app.documents[0].links.length; i++) {
app.documents[0].links[i].addEventListener( "beforeDelete", linkEntfernt);
}
app.documents[0].addEventListener( "afterPlace", neuerLink);
app.documents[0].addEventListener( "beforeSave", BilderMarkieren);
app.documents[0].addEventListener( "beforeSaveAs", BilderMarkieren);

var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge deaktivieren");
myAlbumProMenu_entry.eventListeners.add("onInvoke", untagDocument);
myAlbumProMenu.menuItems.add(myAlbumProMenu_entry);

var myAlbumProMenu_entry = app.scriptMenuActions.item("Bildmarkierung in Bridge aktivieren");
myAlbumProMenu_entry.remove();

}
}

//untagDocument wird ausgeführt, wenn im Menü die Funktion "Bildmarkierung in Bridge deaktivieren" ausgeführt wird.
//Änderung des Menüeintrags auf tagDocument
function untagDocument (myEvent) {
if (app.documents.length > 0 ) {
app.documents[0].insertLabel("AlbumProDocument", "false");

for (var i =0; i < app.documents[0].links.length; i++) {
app.documents[0].links[i].removeEventListener( "beforeDelete", linkEntfernt);
}
app.documents[0].removeEventListener( "afterPlace", neuerLink);
app.documents[0].removeEventListener( "beforeSave", BilderMarkieren);
app.documents[0].removeEventListener( "beforeSaveAs", BilderMarkieren);

var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge aktivieren");
myAlbumProMenu_entry.eventListeners.add("onInvoke", tagDocument);
myAlbumProMenu.menuItems.add(myAlbumProMenu_entry);

var myAlbumProMenu_entry = app.scriptMenuActions.item("Bildmarkierung in Bridge deaktivieren");
myAlbumProMenu_entry.remove();
}
}

//Definieren der EventListener Funktionen

//Beim öffnen eines Dokuments wird geprüft, ob dieses für die Bildmarkierung in Bridge aktiviert wurde.
//Dies ist der Fall, wenn das Dokument im Label AlbumProDocument den Wert true stehen hat.
//Wenn das Dokument aktiviert ist, dann wird jedem Bild der EventListener beforeDelete hinzugefügt.
//So wird sichergestellt, dass beim Löschen "alter" Bilder das Flag in Bridge entfernt wird.
//Für das Dokument wird der EventListener "afterPlace" gesetzt um neue Bilder in Bridge zu markieren.
app.addEventListener("afterOpen", checkDokument);

function checkDokument (_event) {

if (_event.parent.constructor.name == "Document") {
var _dok = _event.parent;

if (_dok.extractLabel ("AlbumProDocument") == "true") {
for (var i =0; i < _dok.links.length; i++) {
_dok.links[i].addEventListener( "beforeDelete", linkEntfernt);
}
_dok.addEventListener( "afterPlace", neuerLink);
}
}
}

//Bei dem Löschen eines Bildes aus InDesign wird die Funktion linkEntfernt über den EventHandler beforeDelete ausgeführt.
//Diese Funktion entfernt das Label / Rating des Bildes in Bridge über setBridgeLabel.
function linkEntfernt(_event) {
setBridgeLabel(false, _event.currentTarget);
}

//Beim Hinzufügen eines neuen Bildes zum InDesign Dokument wird die Funktion neuerLink über den EventHandler afterPlace ausgeführt.
//Diese Funktion setzt das Label / Rating des Bildes in Bridge über setBridgeLabel.
//Gleichzeitig wird dem neuen Bild der EventHandler beforeDelete hinzugefügt.
function neuerLink(_event) {
var _link = _event.parent.graphics[0].itemLink;
setBridgeLabel(true, _link);
_link.addEventListener( "beforeDelete", linkEntfernt); }

//Beim Speichern oder Speichern unter eines Dokuments werden alle Label / Ratings der enthaltenen Bilder neu gesetzt.
// Es kommt ab und zu vor, dass ein EventHandler nicht ausgelöst wird. Dies wird mit dem pauschalen taggen beim Speichern behoben.
function BilderMarkieren(_event) {
var _dok = _event.currentTarget;
for (var i =0; i < _dok.links.length; i++) {
var _link = _dok.links[i];
setBridgeLabel(true, _link);
_link.addEventListener( "beforeDelete", linkEntfernt);
}
}


//*********************************************************************
//Hier beginnen die SubFunktionen
//*********************************************************************
//setBridgeLabel wird von den Funktionen der EventHandler afterPlace und beforeDelete ausgeführt
//Es wird zuerst der BridgeTalk Befehl über die Funktion setThumbnails zusammengebaut und dann ausgeführt.
function setBridgeLabel(_setzeLabel, _link) {
var _fileStr = _link.filePath.toString();
var _target = BridgeTalk.getSpecifier ("bridge");
if (!BridgeTalk.isRunning(_target)) BridgeTalk.launch("bridge");

var _bt = new BridgeTalk;
_bt.target = _target;
// Hier wird die Funktion als String zusammengebaut und danach direkt aufgerufen.

var _script = 'var _thumb = new Thumbnail (File("'+_fileStr+'"));'
//Dies ist der Fall, dass ein neuer Link hinzugefügt wurde
if (_setzeLabel == true) {
if (varBridge_Rating_aktiv == true) {
_script += '_thumb.rating = '+varBridge_Rating+';'
}
if (varBridge_Label_aktiv == true) {
_script += '_thumb.label = "'+varBridge_Label+'";'
}
//Dies ist der Fall, dass ein neuer Link gelöscht wurde
} else {
if (varBridge_Rating_aktiv == true) {
_script += '_thumb.rating = 0;'
}
if (varBridge_Label_aktiv == true) {
_script += '_thumb.label = "";'
}
}
// $.writeln (_script);
// Im Body kann entweder Code übergeben werden oder eine Funktion doScript aufgerufen werden.
_bt.body = _script;
_bt.send();
}



als Antwort auf: [#484874]