[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:
(6757 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: 5321

2. Dez 2013, 12:30
Beitrag # 2 von 20
Beitrag ID: #520379
Bewertung:
(6721 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:
(6712 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: 12785

2. Dez 2013, 13:05
Beitrag # 4 von 20
Beitrag ID: #520382
Bewertung:
(6689 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: 5321

2. Dez 2013, 13:10
Beitrag # 5 von 20
Beitrag ID: #520383
Bewertung:
(6684 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:
(6681 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: 12785

2. Dez 2013, 13:19
Beitrag # 7 von 20
Beitrag ID: #520385
Bewertung:
(6671 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:
(6670 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: 5321

2. Dez 2013, 13:21
Beitrag # 9 von 20
Beitrag ID: #520387
Bewertung:
(6663 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:
(6657 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: 5321

2. Dez 2013, 13:24
Beitrag # 11 von 20
Beitrag ID: #520390
Bewertung:
(6656 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:
(6622 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: 5321

2. Dez 2013, 13:42
Beitrag # 13 von 20
Beitrag ID: #520396
Bewertung:
(6619 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: 5321

2. Dez 2013, 13:44
Beitrag # 14 von 20
Beitrag ID: #520397
Bewertung:
(6619 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:
(6601 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]
X

Aktuell

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
18.06.2024

Online
Dienstag, 18. Juni 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow