[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Eine Farbskala per JavaScript

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

Eine Farbskala per JavaScript

Hans Haesler
  
Beiträge gesamt: 5822

31. Mär 2011, 21:15
Beitrag # 1 von 1
Bewertung:
(1143 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter,

okay ... die von InDesign-Forum-Benutzerin "gästchen" gestellte Aufgabe ist längstens gelöst worden: http://www.hilfdirselbst.ch/..._P457268.html#457268

Damals wurden Vorgehen mit Illustrator und Photoshop vorgeschlagen. Vom direkten Gebrauch von InDesign riet Gerald zu recht ab: "Machen Sie sowas lieber in Illustrator."

Dennoch reizte es mich, per JavaScript eine reine InDesign-Lösung zu entwickeln.

Das Problem: Für jeden Rahmen muss ein Farbfeld erzeugt werden. Per Script ist es nicht möglich, dem Objekt nur die CMYK-Werte zuzuweisen.

Was auch nicht geht: Das Farbfeld temporär erzeugen, zuweisen, löschen und durch ein unbenanntes Farbfeld ersetzen. [ Eine diesbezügliche Anfrage von Gerald im US-InDesign-Scripting-Forum ist unbeantwortet geblieben: http://forums.adobe.com/message/1111803#111180 ]

Um die von gästchen geforderten 10'000 Rahmen per Script zu erzeugen und einzufärben, ist man mit InDesign CS2 am schnellsten am Ziel. Mit jeder Folgeversion dauert es länger. Ein CS5-Benutzer wartet geschlagene 21 Minuten (trotz MacPro).

Doch mit ein paar Massnahmen kann die Ausführung beschleunigt werden:
– das Dokument unsichtbar öffnen;
– das Auffrischen abschalten;
– per Programm-Umschalter zum Finder wechseln.

Dadurch wird die Wartezeit erträglicher.
CS5: 5'24"
CS4: 2'42"
CS3: 2'15"

Doch nachstehend vorerst eine schnellere Demo-Version, welche dank fünf-Prozent-Stufen "nur" 21 x 21 = 441 Kästchen erzeugt. Die Farbanteile sind fix zugewiesen.

Ein neues InDesign-Dokument erzeugen. Mindestens 145 x 145 Millimeter. Speichern. Dann das Script starten.

Code
//FarbSkala.js 
//DESCRIPTION:Erzeugt eine Farbskala

///// Voreinstellungen Anfang ///////////////////////////////////
var yD = 10; // Distanz zum oberen Seitenrand
var xD = 10; // Distanz zum linken Seitenrand
var fW = 5; // die Breite der Kästchen
var fH = 5; // die Höhe der Kästchen
var dV = 1; // der Abstand zwischen Reihen und Spalten
var mN = 21; // die Anzahl Reihen und Spalten
///// Voreinstellungen Ende /////////////////////////////////////

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

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

// den Dokumentpfad speichern
var curDoc = app.documents[0];
try {
var docPath = curDoc.fullName;
}
catch (e) {
alert ("Das Dokument speichern.", "Achtung");
exit();
}

// das Auffrischen abstellen ...
app.scriptPreferences.enableRedraw = false;
// ... das Dokument schliessen ...
curDoc.close(SaveOptions.yes);
// ... und unsichtbar öffnen
curDoc = app.open(File(docPath), false);

// Variablen initialisieren
var c = -5; // Cyan
var m = 0; // Magenta
var y = 0; // Gelb
var k = 0; // Schwarz
var yOff = fH+dV;
var xOff = fW+dV;
var y1 = yD-yOff;

// eine Schleife durch die Reihen
for (var i=0; i<mN; i++) {
y1 = y1+yOff; // die vertikale Position der aktuellen Reihe
x1 = xD; // der horizontale Startwert für die Spalte
c = c+5; // den Cyan-Wert um fünf erhöhen
y=0; // den Yellow-Wert auf Null zurücksetzen
// die Farbfelder und Kästchen der aktuellen Reihe erzeugen
for (var j=0; j<mN; j++) {
tmpColor = curDoc.colors.add({colorValue:[c,m,y,k]});
curDoc.rectangles.add({geometricBounds:[y1,x1,y1+fH,x1+fW], fillColor:tmpColor, fillTint:100, strokeColor:"None"});
x1 = x1+xOff;
y = y+5;
}
}

// das Auffrischen reaktivieren
app.scriptPreferences.enableRedraw = true;

// das Dokument sichtbar machen ...
curDoc.windows.add();

Aber es wäre doch nett, wenn die CMYK-Werte über einen Dialog eingegeben werden könnten. Und auch die Abstufungen, die Grösse der Kästchen ...

Das ist mit dem Script FarbSkala.js möglich. Hier erhältlich: http://www.fachhefte.ch / Links "JavaScripts", "Mac OS X deutsch" (oder "Windows deutsch"), "InDesign CS2" bis "InDesign CS5".

Gruss, Hans
X