[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Position von ImageFrame bestimmen

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

Position von ImageFrame bestimmen

Udo Göpfert
Beiträge gesamt: 15

11. Dez 2011, 22:58
Beitrag # 1 von 7
Bewertung:
(5420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 Hallo

Ich wiil in Indesign eine Automatische Legende erstellen. Dabei ist es wichtig die genaue Position eines plazierten Bildes zu kennen. Nach langer Suche habe ich dieses Skript gefunden.

Code
// der Name des Bildes  
var imgName = "DCP_1163.tif";

// die Liste der Bilder aufstellen
var allImages = app.documents[0].links;
// die Verknüpfungen zählen
var nImages = allImages.length;

// eine Schleife durch die Bilderliste
var curImg, oldPc, newPc;
for (var p=0; p<nImages; p++) {
// ... wenn der Bildname der definierte ist, dann ...
if (allImages[p].name == imgName) {
// ... wird der Variablen "curImg" das aktuelle Bild zugewiesen
curImg = allImages[p].parent;

var Imagebox = curImg.geometricBounds;

// runde auf 2Stellen
alert (Math.round(Imagebox[1]*100)/100+"\n"+Math.round(Imagebox[0]*100)/100+"\n"+Math.round(Imagebox[3]*100)/100+"\n"+Math.round(Imagebox[2]*100)/100+"\n");

}
}




Ich erhalte hier die Position des Bildes.
Wie kann ich die Position des Rahmens der das Bild enthält auslesen?

Danke für Eure Hilfe.
X

Position von ImageFrame bestimmen

-hans-
Beiträge gesamt: 748

11. Dez 2011, 23:29
Beitrag # 2 von 7
Beitrag ID: #486102
Bewertung:
(5407 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi,

parent des Bildes ist natürlich der Rahmen. Deine Variablenbezeichnung ist da irreführend.

Teste:
Code
/Bild markieren und in die Javascriptkonsole schauen .../ 
$.writeln(app.selection[0].parent)


Lieben Gruß

Hans-Gerd Claßen


als Antwort auf: [#486099]

Position von ImageFrame bestimmen

Hans Haesler
  
Beiträge gesamt: 5818

12. Dez 2011, 17:22
Beitrag # 3 von 7
Beitrag ID: #486152
Bewertung:
(5353 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Udo,

der Code kommt mir irgendwie bekannt vor. ;-)

Wie Hans-Gerd schon erklärt hat, ist der Rahmen, welcher das Bild enthält, dessen parent.

Alles was es braucht ist, in Deiner Zeile ein parent einzufügen:

Code
var Imagebox = curImg.parent.geometricBounds; 

Aber weil die Rahmen mit frame bezeichnet werden, ist es besser, diesen Ausdruck zu verwenden (statt box).

Es schadet nicht, das Anzeigen der Dialoge zu aktivieren. Und die Prüfung, ob ein Dokument geöffnet ist, habe ich auch wieder reingemacht.

Code
// der Name des Bildes 
var imgName = "DCP_1163.tif";

// vorsichtshalber die Dialoge einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// testen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// die Liste der Bilder aufstellen
var allImages = app.documents[0].links;
// die Verknüpfungen zählen
var nImages = allImages.length;
// eine Schleife durch die Bilderliste
for (var p=0; p<nImages; p++) {
// ... wenn der Bildname der definierte ist, dann ...
if (allImages[p].name == imgName) {
// ... wird der Variablen "curImg" das aktuelle Bild zugewiesen
curImg = allImages[p].parent;
// die Position des Rahmens
var gB = curImg.parent.geometricBounds;
alert (gB);
var y1 = Math.round(gB[0]*100)/100;
var x1 = Math.round(gB[1]*100)/100;
var y2 = Math.round(gB[2]*100)/100;
var x2 = Math.round(gB[3]*100)/100;
// die Position der Rahmen-Kanten anzeigen
alert (x1 +"\n" + y1 +"\n" + x2 +"\n" + y2);
break;
}
}

Nicht ganz klar ist der Ablauf. Willst Du für jedes Bild den Code editieren? Wäre es nicht besser, eine Liste der Bildnamen zu verwenden? Oder wenigstens einen Dialog, mit welchem der Name eingegeben werden kann.

Und definitif ist besser, die erhaltenen Werte an Variablen zu übergeben (wie hier gezeigt). Dann können sie zur Erzeugung des Bildunterschrift-Rahmens verwendet werden.

Gruss, Hans


als Antwort auf: [#486102]

Position von ImageFrame bestimmen

Udo Göpfert
Beiträge gesamt: 15

13. Dez 2011, 10:54
Beitrag # 4 von 7
Beitrag ID: #486204
Bewertung:
(5307 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans

Danke für die Hilfe.

Mein Ziel ist es:
Die Verküpfungsliste auszulesen.
Die Liste in einem Dropdown-Menu anzuzeigen in der die Datei mit "Legende" im Namen vorausgewält ist.
Die Legende ist ein EPS mit den Standartelementen. Mein Skript soll nun die Sonderfarben in einer bestimmten Art und Weise über das EPS legen, so das eine komplette Legende mit Sonderfarben etc. entsteht.
Dazu brauche ich die genaue Position des platieren EPS.
Natürlich soll es auch eine User-Schnittstelle geben.

Gruß Udo


als Antwort auf: [#486152]

Position von ImageFrame bestimmen

Hans Haesler
  
Beiträge gesamt: 5818

13. Dez 2011, 14:23
Beitrag # 5 von 7
Beitrag ID: #486239
Bewertung:
(5286 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Udo,

also ... ich komme da nicht ganz mit.

Ob nur *eine* Datei plaziert ist, welche "Legende" im Namen hat, oder mehrere: Das Script könnte diese doch selbständig aufspüren und die Sonderfarben darüberlegen.

Ich würde gerne helfen. Dazu sollte ich aber zwei Dokumente bekommen (vorher/nacher) und eine Schilderung des Ablaufs.

Gruss, Hans


als Antwort auf: [#486204]

Position von ImageFrame bestimmen

Udo Göpfert
Beiträge gesamt: 15

13. Dez 2011, 15:35
Beitrag # 6 von 7
Beitrag ID: #486245
Bewertung:
(5270 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans

ich hab hier mal zwei screenshots auf den Server gelegt.
ftp://iftp_45611:RGhGZDw3@ftp.das-studio.de/Screenshots.zip

der erste Screenshot zeitgt eine leere Legende,die plazierten Bilder und die Farbpallette.

Hier kommt dann mein Script zum Zug.
Das Script soll die Bilderliste durchsuchen nach Dateien die das Wort Legende enthalten. Bei Mehrfachergebnis soll der User die richtige Datei auswähren.

Die Sonderfarben werden in einer Tabelle zur Auswahl gestellt da nur die Farben in der Legende erscheinen sollen die wirklich gedruckt werden.
Danach werden die Felder aus dem 2. Screenshot gezeichnet.


Danke für dein Angebot mir bei der Scripterei zu helfen.
Meine JavaScript-Kenntnisse sind noch sehr bescheiden.
Ich möchte es gern selbst versuchen und mich dann wieder hier in Forum melden wenn es mal wieder nicht weiter geht. Ich denke das steigert den Lerneffekt.

Über Vorschläge,Ideen und Tips würde ich mich trotzdem freuen.

Gruß Udo


als Antwort auf: [#486239]

Position von ImageFrame bestimmen

Hans Haesler
  
Beiträge gesamt: 5818

13. Dez 2011, 17:25
Beitrag # 7 von 7
Beitrag ID: #486262
Bewertung:
(5249 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Udo,

okay. Hier dennoch ein "coup de pouce", ein Schubs mit dem Daumen (wie wir hier in Lausanne sagen): Der Anfang des Scripts. Die Namen der Bilder werden aufgelistet.

Der Alert, der die Namen einzeln anzeigt und dahinter den Index, dient nur zum Verständnis und muss entfernt werden, sobald alles klar ist.

Mit 'indexOf' wird die Position einer Textkette (hier "egende") innerhalb einer anderen Textkette (hier der Bildname) festgestellt. Wenn das Ergebnis -1 ist, dann ist die gesuchte Textkette nicht enthalten. Deshalb wird der Operator != (ist nicht) verwendet: Wenn das Ergebnis nicht minus eins ist, dann hänge den Namen an den Array.

Code
// vorsichtshalber die Dialoge einschalten 
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// testen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// die Liste der Bilder aufstellen
var allImages = app.documents[0].links;
// die Verknüpfungen zählen
var nImages = allImages.length;
var imgNames = new Array ();
var imgCtr = new Array ();
// eine Schleife durch die Bilderliste und die Namen auflisten
for (var p=0; p<nImages; p++) {
// der aktuelle Bildname
var curName = allImages[p].name;
// die folgende Zeile dient nur zur Demonstration
alert (curName + "\nder Index von \"egende\" ist: " + (curName.indexOf("egende")));
// wenn der Name die Textkette "egende" enthält ...
if (curName.indexOf("egende") != -1) {
// ... wird er an den Array angehängt
imgNames.push(curName);
// auch der Zähler wird gespeichert
imgCtr.push(p);
}
}
// wenn der Array mit den Namen mehr als ein Element enthält ...
var nNames = imgNames.length;
if (nNames == 0) {
alert ("Kein Legendenbild gefunden.", "Achtung");
}
else if (nNames == 1) {
// dieser Alert kann entfernt werden
alert ("Ein Legendenbild gefunden.", " ");
}
else if (nNames > 1) {
// diesen Alert durch den Dialog ersetzen, welcher die Liste zur Auswahl anbietet
alert (nNames + " Legendenbilder gefunden.", " ");
}

Es bleibt noch viel zu tun. Die nächste Etappe wird sein, einen Dialog zu zeigen, welcher die Liste der gefundenen Namen zur Auswahl anbietet.

Gruss, Hans


als Antwort auf: [#486245]
(Dieser Beitrag wurde von Hans Haesler am 13. Dez 2011, 17:27 geändert)
X

Aktuell

InDesign / Illustrator

| 23.05.2022

IDUG_300

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 hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/