[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Bildabmessungen auslesen

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

Bildabmessungen auslesen

J.Puff
Beiträge gesamt: 238

2. Dez 2013, 10:25
Beitrag # 1 von 20
Bewertung:
(6744 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich möchte per Script die Größe eines Bildes in Pixel herausfinden. Dabei geht es um die Original-Größe des Bildes, also nicht um die Größe des Bild-Rahmens, auch nicht um die Skalierung oder um Auflösungen.

In der Verknüpfungspalette findet sich dieser Wert unter "Verknüpfungsinformationen : Abmessungen".

Aber wie bekomme ich diesen Wert per Script?

Danke für eine Tipp,
Johannes.
X

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 12:30
Beitrag # 2 von 20
Beitrag ID: #520379
Bewertung:
(6708 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Johannes!

Also einen direkten Weg, eine Property wie "image.meassurements" oder so gibt's ja nicht.

Du könntest:
1. Die Abmessungen über die geometricBounds und die effektive Auflösung errechnen.

2. Das Bild über BridgeTalk in PhotoShop öffnen und dort die Abmessungen auslesen:

2.1 Einheiten auf Pixel stellen
2.2 "height" und "width" des documents auslesen.

Einen anderen Weg sehe ich gerade nicht…


als Antwort auf: [#520376]

Bildabmessungen auslesen

J.Puff
Beiträge gesamt: 238

2. Dez 2013, 12:39
Beitrag # 3 von 20
Beitrag ID: #520380
Bewertung:
(6699 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
danke für die Ideen. Die sind gut, solange das Bild keinen Ausschnitt hat, dann müsste wirklich PhotoShop involviert werden ...
Schade, dass InDesign uns nicht die gleichen Informationen abrufen lässt, die es in der Verknüpfungspalette anzeigen kann.

Beste Grüße
J.


als Antwort auf: [#520379]

Bildabmessungen auslesen

Martin Fischer
  
Beiträge gesamt: 12783

2. Dez 2013, 13:05
Beitrag # 4 von 20
Beitrag ID: #520382
Bewertung:
(6676 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

vielleicht lässt es sich folgendermaßen errechnen:

Code
// gegeben ein ausgewählte Bild 
if (app.selection.length == 0 || app.selection[0].constructor.name != 'Image')
exit();

var img = app.selection[0];

var doc = app.documents.firstItem();

// aktuelle Maßeinheit
var v_unit = doc.viewPreferences.verticalMeasurementUnits;
var h_unit = doc.viewPreferences.horizontalMeasurementUnits;

// Höhe und Breite in aktueller Maßeinheit unter Abzug der Skalierung
var img_height = (img.geometricBounds[2] - img.geometricBounds[0]) * 100 / img.absoluteVerticalScale;
var img_width = (img.geometricBounds[3] - img.geometricBounds[1]) * 100 / img.absoluteHorizontalScale;

// Höhe und Breite in Pixel
var img_heigth_in_pixels = get_in_pixels (img_height, v_unit);
var img_width_in_pixels = get_in_pixels (img_width, h_unit);

// Ausgabe
var str = 'Ergebnis\n\naktuell (100 %):\n\t' +
'Höhe:\t' + img_height + ' ' + img_heigth_in_pixels.type + '\n\t' +
'Breite:\t' + img_width + ' ' + img_width_in_pixels.type + '\n\nin Pixel:\n\t' +
'Höhe:\t' + img_heigth_in_pixels.value + ' px \n\t' +
'Breite:\t' + img_width_in_pixels.value + ' px';
alert( str);


function get_in_pixels(curr_value, curr_unit)
{
var curr_unit_value = UnitValue (curr_value, curr_unit);
return {value: curr_unit_value.as ("PIXELS"), type: curr_unit_value.type};
}


Da müsste am Ende auch der in der Verknüpfungspalette angezeigte Wert rauskommen.

Bin mir aber nicht sicher, ob ich alle möglichen Faktoren, die auf die Berechnung eine Auswirkung haben können, berücksichtigt habe.


als Antwort auf: [#520380]
(Dieser Beitrag wurde von Martin Fischer am 2. Dez 2013, 13:14 geändert)

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 13:10
Beitrag # 5 von 20
Beitrag ID: #520383
Bewertung:
(6671 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Johannes!

Was meinst Du mit "Ausschnitt"? Die "Abmessungen" ändern sich nicht, wenn das Bild nur teilweise im Container-Rahmen zu sehen ist.

Ach ja: die geometricBounds, da hatte ich natürlich an diejenigen des Bildes gedacht. Die auszulesen ist bei verzerrten (shear), gedrehten und skalierten Bildern eine kleine Herausforderung.

Muss aber kein Problem werden, denn Du könntest ja ein Duplikat des Bildes machen und die drei Eigenschaften rotationAngle, shearAngle sowie horizontalScale und verticalScale zurücksetzen.

Ausgehend von der Auswahl eines Bildrahmens geht das folgendermaßen:

Code
var myImage = app.selection[0].graphics[0]; 
var myImageDup = myImage.duplicate().clearTransformations();



als Antwort auf: [#520380]

Bildabmessungen auslesen

J.Puff
Beiträge gesamt: 238

2. Dez 2013, 13:11
Beitrag # 6 von 20
Beitrag ID: #520384
Bewertung:
(6668 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
danke für Dein Script, ich werde es nachher testen.
Beim Überfliegen habe ich den Eindruck, dass es auch nicht die Bildausschnitte berücksichtigt, bzw. berücksichtigen kann - oder?

Beste Grüße
J.


als Antwort auf: [#520382]

Bildabmessungen auslesen

Martin Fischer
  
Beiträge gesamt: 12783

2. Dez 2013, 13:19
Beitrag # 7 von 20
Beitrag ID: #520385
Bewertung:
(6658 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

da habe ich wohl was überlesen bzw. was Falsches reininterpretiert.

Aus
Zitat Dabei geht es um die Original-Größe des Bildes


machte ich unter der Hand
Zitat Dabei geht es um die Original-Größe des Original-Bildes


Ich habe nicht berücksichtigt, dass es nur um den Ausschnitt geht.

Außerdem habe ich das Gefühl, der Code ist ein Overload: von hinten durch die Brust ins Herz geschossen.

Vergiss diese Übung. ;-)


als Antwort auf: [#520384]
(Dieser Beitrag wurde von Martin Fischer am 2. Dez 2013, 13:25 geändert)

Bildabmessungen auslesen

Hans Haesler
  
Beiträge gesamt: 5826

2. Dez 2013, 13:19
Beitrag # 8 von 20
Beitrag ID: #520386
Bewertung:
(6657 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

mit folgendem Script bekommst Du die Werte, welche neben "Abmessungen" im Bedienfeld zu sehen sind.

Code
//Bildgroesse_in_Pixel.js 

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
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 Auswahl speichern und prüfen
var curSel = app.selection;
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Achtung");
exit();
}

// das aktuelle Dokument
var curDoc = app.documents[0];

// Masseinheiten, Linealursprung und Nullpunkt speichern
hM = curDoc.viewPreferences.horizontalMeasurementUnits;
vM = curDoc.viewPreferences.verticalMeasurementUnits;

// Einstellungen ändern
curDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.INCHES;
curDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.INCHES;

var curObj = curSel[0];
// der Typ des Objekts
var curType = curObj.constructor.name;
// prüfen des Typs
if (curType == "Rectangle" || curType == "Oval" || curType == "Polygon") {
curImage = curObj.graphics[0];
}
else if (curType == "Image") {
curImage = curObj;
}

// die Dimensionen speichern
var gB = curImage.geometricBounds;

// die Skalierung
var hSca = curImage.horizontalScale;
var vSca = curImage.verticalScale;

// die Originalauflösung
var ppi = curImage.actualPpi;

// die Breite
var imgW = ((((gB[3]-gB[1]))/hSca)*100)*ppi[0];
// die Höhe
var imgH = ((((gB[2]-gB[0]))/vSca)*100)*ppi[0];

// Masseinheiten, Linealursprung und Nullpunkt zurücksetzen
curDoc.viewPreferences.horizontalMeasurementUnits = hM;
curDoc.viewPreferences.verticalMeasurementUnits = vM;

// das Ergebnis anzeigen
alert ("Abmessungen = " + imgW + " x " + imgH + " Pixel", " ");

Also die totale Oberfläche eines Bildes, ungeachtet einer eventuellen Maskierung.

Diese erste Version liefert nur ein korrektes Ergebnis, wenn Dreh- und Scherwinkel auf Null stehen.

Gruss, Hans


als Antwort auf: [#520384]

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 13:21
Beitrag # 9 von 20
Beitrag ID: #520387
Bewertung:
(6650 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sorry, der Schnipsel enthält noch etliche "Unschärfen" in der Variablenbenennung.

So sollte es gehen:

Code
var myImage = app.selection[0].graphics[0]; 
var myImageContainerOfDup = myImage.duplicate();
myImageContainerOfDup.clearTransformations();
var myImageDup = myImageContainerOfDup.graphics[0];



als Antwort auf: [#520383]

Bildabmessungen auslesen

J.Puff
Beiträge gesamt: 238

2. Dez 2013, 13:22
Beitrag # 10 von 20
Beitrag ID: #520388
Bewertung:
(6644 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
wunderbar, vielen Dank, das war, was ich suchte!

Beste Grüße
Johannes


als Antwort auf: [#520386]

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 13:24
Beitrag # 11 von 20
Beitrag ID: #520390
Bewertung:
(6643 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Hans!

Mit meiner "Begradigung" über das Duplikat und Zurücksetzen mit der clearTransformations()-Methode sollte es klappen eine normierte Ausgangsbasis für Dein Script zu haben.


als Antwort auf: [#520386]

Bildabmessungen auslesen

Hans Haesler
  
Beiträge gesamt: 5826

2. Dez 2013, 13:41
Beitrag # 12 von 20
Beitrag ID: #520393
Bewertung:
(6609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe!

ja, so klappt es.

Allerdings wird dann ein Bild auch dupliziert, wenn es gar nicht notwendig wäre.

Weiss aber auch nicht, ob das Drehen und Scheren auf Null und wieder zurück besser ist.

Wie dem auch sei, nochmals das Script, ergänzt mit den Duplizieren-Zeilen:

Code
//Bildgroesse_in_Pixel.js 

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
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 Auswahl speichern und prüfen
var curSel = app.selection;
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Achtung");
exit();
}

// das aktuelle Dokument
var curDoc = app.documents[0];

var curObj = curSel[0];
// der Typ des Objekts
var curType = curObj.constructor.name;
// prüfen des Typs
if (curType == "Rectangle" || curType == "Oval" || curType == "Polygon") {
curImage = curObj.graphics[0];
}
else if (curType == "Image") {
curImage = curObj;
}
else {
alert ("Bitte ein Bild auswählen.", "Stop");
exit();
}

// das Bild kopieren und die Transformationen entfernen
try {
var curImageContainerOfDup = curImage.duplicate();
curImageContainerOfDup.clearTransformations();
var curImage = curImageContainerOfDup.graphics[0];
}
catch (e) {
alert ("Der Bildrahmen ist leer.", "Stop");
exit();
}

// Masseinheiten, Linealursprung und Nullpunkt speichern
hM = curDoc.viewPreferences.horizontalMeasurementUnits;
vM = curDoc.viewPreferences.verticalMeasurementUnits;

// Einstellungen ändern
curDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.INCHES;
curDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.INCHES;

// die Dimensionen speichern
var gB = curImage.geometricBounds;

// die Skalierung
var hSca = curImage.horizontalScale;
var vSca = curImage.verticalScale;

// die Originalauflösung
var ppi = curImage.actualPpi;

// die Breite
var imgW = ((((gB[3]-gB[1]))/hSca)*100)*ppi[0];
// die Höhe
var imgH = ((((gB[2]-gB[0]))/vSca)*100)*ppi[0];

// Masseinheiten, Linealursprung und Nullpunkt zurücksetzen
curDoc.viewPreferences.horizontalMeasurementUnits = hM;
curDoc.viewPreferences.verticalMeasurementUnits = vM;

// die Kopie entfernen
curImageContainerOfDup.remove();

// das Ergebnis anzeigen
alert ("Abmessungen = " + imgW + " x " + imgH + " Pixel", " ");

Gruss, Hans


als Antwort auf: [#520390]
(Dieser Beitrag wurde von Hans Haesler am 2. Dez 2013, 17:40 geändert)

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 13:42
Beitrag # 13 von 20
Beitrag ID: #520396
Bewertung:
(6606 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, zusammen!

So funktioniert's auch mit gedrehten und geshearten Bildern:

Code
//Bildgroesse_in_Pixel.js 
//Leicht modifiziert: Uwe Laubender

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
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 Auswahl speichern und prüfen
var curSel = app.selection;
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Achtung");
exit();
}

//Uwe Laubender
//Normalisieren:
var originalSelection = app.selection[0];
var myImage = originalSelection.graphics[0];
var myImageContainerOfDup = myImage.duplicate();
myImageContainerOfDup.clearTransformations();


// das aktuelle Dokument
var curDoc = app.documents[0];

// Masseinheiten, Linealursprung und Nullpunkt speichern
hM = curDoc.viewPreferences.horizontalMeasurementUnits;
vM = curDoc.viewPreferences.verticalMeasurementUnits;

// Einstellungen ändern
curDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.INCHES;
curDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.INCHES;

//~ var curObj = curSel[0];
//~ // der Typ des Objekts
//~ var curType = curObj.constructor.name;
//~ // prüfen des Typs
//~ if (curType == "Rectangle" || curType == "Oval" || curType == "Polygon") {
//~ curImage = curObj.graphics[0];
//~ }
//~ else if (curType == "Image") {
//~ curImage = curObj;
//~ }

var curImage = myImageContainerOfDup.graphics[0];

// die Dimensionen speichern
var gB = curImage.geometricBounds;

// die Skalierung
var hSca = curImage.horizontalScale;
var vSca = curImage.verticalScale;

// die Originalauflösung
var ppi = curImage.actualPpi;

// die Breite
var imgW = ((((gB[3]-gB[1]))/hSca)*100)*ppi[0];
// die Höhe
var imgH = ((((gB[2]-gB[0]))/vSca)*100)*ppi[0];

// Masseinheiten, Linealursprung und Nullpunkt zurücksetzen
curDoc.viewPreferences.horizontalMeasurementUnits = hM;
curDoc.viewPreferences.verticalMeasurementUnits = vM;

myImageContainerOfDup.remove();
app.select(originalSelection);

// das Ergebnis anzeigen
alert ("Abmessungen = " + imgW + " x " + imgH + " Pixel", " ");



als Antwort auf: [#520390]

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 13:44
Beitrag # 14 von 20
Beitrag ID: #520397
Bewertung:
(6606 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Hans!
Ja, da haben sich unsere beiden letzten Posts überschnitten.
Ich für meinen Teil entferne das Duplikat in den Aufräumarbeiten weiter unten.


als Antwort auf: [#520393]

Bildabmessungen auslesen

Hans Haesler
  
Beiträge gesamt: 5826

2. Dez 2013, 13:53
Beitrag # 15 von 20
Beitrag ID: #520400
Bewertung:
(6588 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe!

auch in meinem Vorschlag wird die Kopie kurz vor dem Anueigen des Ergebnisses entfernt.

Achtung: Wenn der Anwender den Bildrahmen-Inhalt ausgewählt hat, dann kommt mit Deiner Version eine Fehlermeldung.

Gruss, Hans


als Antwort auf: [#520397]

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 14:04
Beitrag # 16 von 20
Beitrag ID: #520401
Bewertung:
(1167 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Hans!

Korrekt. Das kann man noch verfeinern. Ebenso der Fall, dass die platzierte Grafik vom Typ her nicht "Image" entspricht, also EPS oder PDF und die Abmessungen in Pixeln nicht auslesbar sind.

Mein Zusatzcode war nur auf die Schnelle eingefügt, um die Fälle "Rotation" und "Shear" abzudecken…


als Antwort auf: [#520400]

Bildabmessungen auslesen

Hans Haesler
  
Beiträge gesamt: 5826

2. Dez 2013, 14:07
Beitrag # 17 von 20
Beitrag ID: #520402
Bewertung:
(1164 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Johannes,

ich habe den Code im Beitrag #12 mit weiteren Prüfungen ergänzt, damit die Fehlermeldung klarer ist, wenn ein leerer Bildrahmen (oder etwas anderes) ausgewählt ist.

Gruss, Hans


als Antwort auf: [#520400]

Bildabmessungen auslesen

Uwe Laubender
Beiträge gesamt: 5316

2. Dez 2013, 14:09
Beitrag # 18 von 20
Beitrag ID: #520404
Bewertung:
(1161 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hab Dein Script mal mit 'nem platzierten EPS getestet.
Das läuft dann auf einen Fehler hinaus, der nicht abgefangen wird…

Also: EPS und PDF müssten noch als Fall abgedeckt werden.


als Antwort auf: [#520401]

Bildabmessungen auslesen

Hans Haesler
  
Beiträge gesamt: 5826

2. Dez 2013, 14:10
Beitrag # 19 von 20
Beitrag ID: #520405
Bewertung:
(1160 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe!

ja, mit PDF und so wird es eine Fehlermeldung absetzen.

Aber Johannes wird uns bestimmt durchgeben, ob entsprechende Prüfungen notwendig sind.

Gruss, Hans


als Antwort auf: [#520401]

Bildabmessungen auslesen

J.Puff
Beiträge gesamt: 238

2. Dez 2013, 15:12
Beitrag # 20 von 20
Beitrag ID: #520407
Bewertung:
(1107 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Uwe,
großartige Unterstützung! Vielen Dank.
So wie es jetzt ist komme ich prima damit klar!

Schönen Tag noch,
Johannes


als Antwort auf: [#520405]
X