[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Bilder und alle Instanzen der Bilder skalieren - Problem

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

Bilder und alle Instanzen der Bilder skalieren - Problem

faxinger
Beiträge gesamt: 246

9. Mai 2017, 13:06
Beitrag # 1 von 5
Bewertung:
(2139 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sorry, aber ich komm leider nicht weiter:

Ich habe nun ein Skript für 2 Bilder die unterschiedlich skaliert werden sollen:
Code
    // ScaleEveryImage.jsx   
//
var myScale_bild1 = 50; // Skalierungsfaktor
var myPics_bild1 = app.documents[0].allgraphics.itemLink.name("bild1.jpg");
for (onePic = 0; onePic < myPics_bild1.length; onePic++){
myPics_bild1[onePic].horizontalScale = myScale_bild1;
myPics_bild1[onePic].verticalScale = myScale_bild1;
myPics_bild1[onePic].fit(FitOptions.frameToContent); // schmiegt den Rahmen wieder an's Bild an.
}

var myScale_bild2 = 65; // Skalierungsfaktor
var myPics_bild2 = app.documents[0].allgraphics.itemLink.name("bild2.jpg");
for (onePic = 0; onePic < myPics_bild2.length; onePic++){
myPics_bild2[onePic].horizontalScale = myScale_bild2;
myPics_bild2[onePic].verticalScale = myScale_bild2;
myPics_bild2[onePic].fit(FitOptions.frameToContent); // schmiegt den Rahmen wieder an's Bild an.
}



Aber ich bekomm es einfach nicht hin. Bitte um eure Hilfe.

Danke
X

Bilder und alle Instanzen der Bilder skalieren - Problem

Uwe Laubender
Beiträge gesamt: 5316

9. Mai 2017, 18:57
Beitrag # 2 von 5
Beitrag ID: #557350
Bewertung:
(2125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

so wird das auch nichts.
Geh' mal Schritt für Schritt vor, wenn Du programmierst.

Deine Zeile 4 wird Dir ja bereits einen Fehler werfen.
Da nützt es nichts, einfach weiterzuschreiben.

Code
app.documents[0].allgraphics.itemLink.name("bild1.jpg"); 
// Object does not support the property or method 'allgraphics'


Klar, weil das Objekt [b]document die Eigenschaft [b]allgraphics nicht kennt.
Achte auf Klein/Großschreibung!

Die DOM-Dokumentation gibt's online oder zum Downloaden.
Hier mal ein Link auf die Eigenschaft:

http://jongware.mit.edu/...ent.html#allGraphics

Array of Graphic heißt es da.
Ein Klick auf Graphic zeigt uns alle Eigenschaften von [b]Graphic:

http://jongware.mit.edu/idcs6js/pc_Graphic.html

Schön aufgelistet, was sich hinter Graphic alles verbergen kann.
Und was dann, sofern im Dokument platziert, auch im Array [b]allGraphics gespeichert ist.

[b]Das ist ein wenig wie Schnitzeljagd.
Gehen wir nur die Liste der Eigenschaften von [b]Graphic durch, stoßen wir auf [b]itemLink.
Aha. Der Wert von [b]itemLink ist ein Link-Objekt.

Also angeklickt:
http://jongware.mit.edu/idcs6js/pc_Link.html

Ein wenig runterscrollen. Da gibt's die Eigenschaft [b]name.
Also doch genau das, was wir suchen und vergleichen können.
Nämlich mit den Werten "bild1.jpg" und "bild2.jpg".

Also wäre der nächste Schritt, das [b]Array [b]allGraphics über eine Schleife nach [b]itemLink.name zu befragen:
Falls der Wert dieser Abfrage mit Deinen Bildnamen übereinstimmt, dann skalierst Du.

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

for(var n=0;n<allGraphics.length;n++)
{
if(allGraphics[n].itemLink.name == "bild1.jpg")
{
// Skalieren! Aber was?
// allGraphics[n]
// plus den Grafikrahmen!
};
};



als Antwort auf: [#557346]

Bilder und alle Instanzen der Bilder skalieren - Problem

faxinger
Beiträge gesamt: 246

10. Mai 2017, 20:41
Beitrag # 3 von 5
Beitrag ID: #557367
Bewertung:
(2069 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Uwe für die ausführlichen Erläuterungen.
Was ich verstehe:
var doc: das erste offene Dokument
var allGraphics: Alle Bilder in diesem Dokument.

Mit der for Schleife werden jetzt alle Bilder in ein Array (= Sammlung)aufgenommen.

Mit der If Abfrage wird nachgesehen ob in diesem Array ein Bild mit dem Namen bild1.jpg vorhanden ist.

Muss ich jetzt dieses bild1.jpg noch extra in einer Variable abspeichern bzw. wie sage ich JS dass genau dieses bild1.jpg und alle Instanzen davon auf 50% skaliert werden?

Es geht ja nicht: (bild1.jpg).horizontalScale && (bild1.jpg).verticalScale = 50;


als Antwort auf: [#557350]

Bilder und alle Instanzen der Bilder skalieren - Problem

Uwe Laubender
Beiträge gesamt: 5316

10. Mai 2017, 23:10
Beitrag # 4 von 5
Beitrag ID: #557373
Bewertung:
(2059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

es wird nicht nur einfach nachgesehen, ob irgendwo im Array eine platzierte Grafik vorhanden ist, deren Link mit dem dem gewünschten Bildnamen übereinstimmt. Sondern: Es wird exakt ermittelt, wann genau, also bei welchem Schleifendurchgang ( Wert von Variable n ), der gesuchte Name mit dem Namen des Links einer platzierten Grafik übereinstimmt.

Die gewünschte platzierte Grafik ist dann in diesem Moment hier gespeichert:

Code
allGraphics[n] 


Skalieren des Bildes und den Rahmen anpassen kannst Du meinetwegen in 3 Schritten:

Code
allGraphics[n].horizontalScale = 50; 
allGraphics[n].verticalScale = 50;
allGraphics[n].parent.fit(FitOptions.FRAME_TO_CONTENT);


Wobei ich davon wenig halte.
Sondern würde die Skalierung von Bildrahmen und Bild zusammen in einem Rutsch erledigen.
Da darf die Grafik auch über den Bildrahmen angeschnitten sein und die relative Position der Grafik zum Bildrahmen wird sich nach der Operation nicht ändern.

Siehe hier:
http://www.hilfdirselbst.ch/...i?post=557286#557286

Im "richtigen Leben" muss noch etwas anderes ermittelt werden:
Ist die Grafik, ist der Grafikrahmen, der das Bild trägt, überhaupt zugänglich für geometrische Operationen? Der könnte sich auch im Übersatz befinden. Und da wird Dir ein Befehl zum Skalieren einen Fehler werfen.

Noch eine wichtige Nebenbemerkung:
Ein Array ist keine Collection (Sammlung)!


als Antwort auf: [#557367]

Bilder und alle Instanzen der Bilder skalieren - Problem

faxinger
Beiträge gesamt: 246

12. Mai 2017, 09:43
Beitrag # 5 von 5
Beitrag ID: #557400
Bewertung:
(1955 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

vielen Dank. Jetzt bin ich da wo ich hinwollte. Funktioniert alles prima.

Noch eine kleine Zusatzfrage: Da verticalscale immer gleich horizontalscale ist könnte ich das nicht gleich direkt zuweisen?

in der Art: allGraphics[n].horizontalScale = allGraphics[n].verticalScale = 50;

Danke


als Antwort auf: [#557373]
X