[GastForen Programmierung/Entwicklung AppleScript Quark Bildgröße

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Quark Bildgröße

swish
Beiträge gesamt: 75

17. Apr 2005, 12:11
Beitrag # 1 von 5
Bewertung:
(1883 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ist es möglich in Quark die Dimensionen eines Bildes auszulesen ?

Hintergrund ist ein Skript, welches automatisch Bilder tauschen soll. Nun kann es aber vorkommen, dass das neue Bild eine andere Größe hat. Somit würde es natürlich gegenüber dem Original verspringen.

Ich möchte jetzt in das Skript eine Abfrage einbauen, die mir angibt, ob das neue Bild genauso groß ist wie das alte (plus minus ein paar Milimeter, um ein wenig "Spiel" zu haben).

Danke jetzt schonmal!

Gruß,

Stephan

(Dieser Beitrag wurde von swish am 31. Mai 2010, 09:34 geändert)
X

Quark Bildgröße

Hans Haesler
  
Beiträge gesamt: 5818

17. Apr 2005, 16:29
Beitrag # 2 von 5
Beitrag ID: #419517
Bewertung:
(1882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

um die Bildgrösse eines geladenen Bildes zu erfahren, kann man die 'bounds' abfragen:
---
tell document 1 of application "QuarkXPress 4.11"
    tell current box
        set imgSize to bounds of image 1
    end tell
end tell

---
Das Resultat ist eine Definition eines Rechtecks, eine Liste mit Pixelwerten, zum Beispiel {0, 0, 271, 492}.
Die beiden ersten Zahlen (Eckpunkt oben links) sind meistens Nullen (Ausnahme: eine defekte Bildbox).
Der dritte Wert ist die Breite, der vierte die Höhe des Bildes.

Du kannst also das alte Bild abfragen und die Breite und die Höhe speichern:
---
tell document 1 of application "QuarkXPress 4.11"
    tell current box
        set imgSize to bounds of image 1
    end tell
    set oldWidth to item 3 of imgSize
    set oldHeight to item 4 of imgSize
end tell
Code
Dann das neue Bild laden und die Werte verlangen. 

tell document 1 of application "QuarkXPress 4.11"
    tell current box
        set imgSize to bounds of image 1
    end tell
    set newWidth to item 3 of imgSize
    set newHeight to item 4 of imgSize
end tell

---
Schliesslich die Resultate miteinander vergleichen und, falls notwendig, Massnahmen treffen.

Gruss, Hans


als Antwort auf: [#419516]

Quark Bildgröße

swish
Beiträge gesamt: 75

18. Apr 2005, 09:29
Beitrag # 3 von 5
Beitrag ID: #419518
Bewertung:
(1882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
VIELEN DANK !!!!

Hat mir sehr geholfen !


als Antwort auf: [#419516]

Quark Bildgröße

swish
Beiträge gesamt: 75

27. Apr 2005, 13:23
Beitrag # 4 von 5
Beitrag ID: #419519
Bewertung:
(1882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo hans,

ich hab jetzt eine erste Betaversion von meinem Bilder-Aus-Alias-Ordner-Aktualisieren-Skript halbwegs fertig. (Und habe zum Glück eine ganze Menge aus Deinen Skripten übernehmen können :wink: )
Allerdings hat sich da wohl irgendwie ein Fehler eingeschlichen.

Ich beschreib' mal kurz den Sinn des Skripts:

- Ein Quark Dok kommt vom Kunden, er hat die Bilder mit den von uns erhaltenen Layoutdaten aufgebaut.
- Bei uns haben die Layouts einen anderen Pfad, den ich dann über eine Batchsuche (die funktioniert ja Dank Deiner Hilfe schon ganz gut) im Finder finde und mir Aliasse in einen bestimmten Ordner legen lasse

Dieses Quark Skript soll jetzt die Dokumente mit den Bildern aus dem Aliasordner aktualisieren. So weit funktioniert es. Falls aber der Kunde ein Layoutbild verändert hat (z.B. die Größe), soll das Skript in einer Error-Log Bescheid geben, dass dieses Bild zu prüfen ist.

Einen Fehler bekomm ich dann bei der Berechnung der Größe des Originalbildes.

Ich lasse die Bounds der "picture box i" auslesen und dummerweise ist der erhaltene Wert des items 3 nicht der selbe wie der Wert, den ich bei der gleichen Abfrage erhalte nachdem das Bild ausgetauscht wurde. Um genau zu sein ist es exakt die Hälfte der Größe des neuen Bildes.
Ich habe jetzt ein wenig herumprobiert: andere Bilder und andere Größen in Quark, aber es kommt jedesmal wieder nur die halbe Größe beim Originalbild heraus ....

Könntest Du mal einen kurzen Blick auf das Skript werfen und mir sagen, ob ich da irgendwo einen ganz fiesen Denkfehler habe ?

[code:1]
on open filePath
 tell application "QuarkXPress Passport™ 4.11"
  open filePath as alias use doc prefs yes remap fonts no do auto picture import no
 
 
  tell document 1
   set ImgCount to the count of picture boxes
   
   repeat with i from 1 to ImgCount
   
    set imgPath to (get file path of image 1 of picture box i) as string
   
    set imgSizeOld to ""
    tell picture box i
     set imgSizeOld to bounds of image 1
    end tell
   
    set oldWidth to item 3 of imgSizeOld as real
    set oldHeight to item 4 of imgSizeOld as real
   
    display dialog oldWidth
   
    set AppleScript's text item delimiters to ":"
    set Bildname to last text item of imgPath
    set AppleScript's text item delimiters to ""
   
    set Aliasordner to "MAC_151_X.3.5:Users:swissing:Desktop:layouts:"
   
    set Objektliste to list folder Aliasordner without invisibles
   
    if Objektliste contains Bildname then
     
     set NeuerPfad to Aliasordner & Bildname
     
     tell application "Finder"
      set NeuesBild to original item of (NeuerPfad as alias)
     end tell
     
     tell picture box i
      set imgProps to properties of image 1
     end tell
     
     set image 1 of picture box i to NeuesBild as alias
     
     tell picture box i
      set properties of image 1 to {scale:scale of imgProps, offset:offset of imgProps ¬
       , angle:angle of imgProps, skew:skew of imgProps, color:color of imgProps ¬
       , shade:shade of imgProps, suppress printing:suppress printing of imgProps ¬
       , negative:negative of imgProps, image trap:image trap of imgProps}
     
     end tell
     
     tell picture box i
      set imgSizeNew to bounds of image 1
     end tell
     
     set newWidth to item 3 of imgSizeNew as real
     set newHeight to item 4 of imgSizeNew as real
     
     display dialog newWidth
     
     set divWidth to oldWidth - newWidth
     set divHeight to oldHeight - newHeight
     
     if divWidth + divHeight ? 0 then
      my writeLog(Bildname)
     else
      set OK to "OK"
      my writeLog(OK)
     end if
     
     
    end if
   
   end repeat
   
  end tell
 
 end tell
end open


on writeLog(NeuesBild)
 
 set LogPath to path to desktop as string
 set LogDatei to LogPath & "ObjektAktualisierer.txt"
 
 set returnChar to (ASCII character 13)
 
 tell application "Finder"
 
 
  if not (exists file LogDatei) then
   open for access file LogDatei with write permission
   set eof of file LogDatei to 0
  end if
 
  if NeuesBild ? "OK" then
   write "Vorsicht mit : " & NeuesBild & returnChar to file LogDatei
  else
   write "OK" & returnChar to file LogDatei
  end if
 end tell
 
end writeLog[/code:1]


als Antwort auf: [#419516]

Quark Bildgröße

Hans Haesler
  
Beiträge gesamt: 5818

27. Apr 2005, 16:47
Beitrag # 5 von 5
Beitrag ID: #419520
Bewertung:
(1882 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stephan,

nun ... die 'bounds' der Bilder sind nur verlässlich, wenn das alte und das neue Bild unter den gleichen
Voraussetzungen gesichert sind. Denn wenn der Typ geändert wird (z.B. EPS anstelle von TIFF) oder gar die
Auflösung, dann ist das Resultat bestimmt anders (ausser bei exakten Vielfach-Werten von 72).
Auch wenn Photoshop noch die gleiche Anzahl Pixel zeigt.

Währenddem der Dateityp leicht abgefragt werden kann, muss für die Auflösung ein Helfer beigezogen
werden. Zum Beispiel "Image Info" von David Lloyd, erhältlich hier: http://www.kanzu.com/

* * * * *
Einige Bemerkungen zum Script. Die beiden Zeilen ...
---
set ImgCount to the count of picture boxes
repeat with i from 1 to ImgCount
Code
... kannst Du zu [i]einer zusammenfassen: 

[b]repeat with i [b]from 1 [b]to count [b]of picture boxes
---

Die beiden Werte sind schon Zahlen. Sie müssen nicht konvertiert werden (und wenn es wirklich notwendig
wäre, dann schon 'as integer' [= Ganzzahl]).
---
[b]set oldWidth [b]to item 3 [b]of imgSizeOld
[b]set oldHeight [b]to item 4 [b]of imgSizeOld

---

Die 'text item delimiters' werden korrekterweise als Liste dargestellt. Mit Akkoladen (Option-8 und -9):
Code
[b]set AppleScript's text item delimiters [b]to [pink]{[/pink]":"[pink]}[/pink] 

Die beiden Zeilen ausserhalb der Repeatschleife plazieren, damit die Befehle nur einmal ausgeführt werden.
Aber als 'property' deklarieren, damit sie innerhalb des 'open'-Handlers erkannt werden.
---
property Aliasordner : (path to desktop as string) & "layouts:"
property Objektliste : list folder Aliasordner without invisibles

---
Ich sehe, dass Du QuarkXPress 4.11 unter Mac OS X laufen hast. Nicht gerade ein ideales Paar ...

Der "Finder"-tell-Block innerhalb des "XPress"-tell-Blocks sollte vermieden werden. Besser einen Handler aufrufen:
---
set NeuesBild to my getOriginal(NeuerPfad)
if NeuesBild is "" then exit repeat

---
Anstelle des 'exit repeat' wäre es natürlich besser, einen entsprechenden Kommentar in ein Logfile zu schreiben.

Hier der Handler zum Feststellen des Orginals (ausserhalb des 'open'-Handlers plazieren):
---
on getOriginal(NeuerPfad)
   set NeuesBild to ""
   try
      tell application "Finder" to set NeuesBild to original item of (NeuerPfad as alias)
   end try
   return NeuesBild
end getOriginal

---

Zum Dessert der 'writeLog'-Handler ... Die drei Zeilen für den Pfad und den Return sollten auch als 'property' definiert
und an den Scriptanfang verschoben werden:
---
property LogDatei : (path to desktop as string) & "ObjektAktualisierer.txt"
property returnChar : (ASCII character 13)

---
Der Finder muss nicht bemüht werden, um das Existieren der Logdatei zu prüfen. Denn das 'open for access' erzeugt die
Datei. Wichtig ist aber, dass sie geschlossen wird. Sonst kann man sie eventuell nicht mehr entfernen. Auch beim Schreiben
muss mit 'try'-Wickeln gearbeitet werden, damit das Script bei einem Problem versuchen kann, die Datei zu schliessen.
Und wenn man die verschiedenen Meldungen in der Datei vorfinden will, muss 'starting at eof' angefügt werden, sonst
wird die Logdatei nur den letzten Eintrag enthalten:
---
on writeLog(NeuesBild)
   try
      open for access file LogDatei with write permission
      if NeuesBild is not "OK" then
         write "Vorsicht mit : " & NeuesBild & returnChar to file LogDatei[pink] starting at eof[/pink]
      else
         write "OK" & returnChar to file LogDatei[pink] starting at eof[/pink]
      end if
      close file LogDatei
   on error
      try
         close file LogDatei
      end try
   end try
end writeLog

---
Wie Du siehst, habe ich anstelle des Zeichens für 'ist nicht' die Worte 'is not' benutzt. Weil diese besser rüberkommen.

Gruss, Hans


als Antwort auf: [#419516]
X

Aktuell

InDesign / Illustrator
axaio_PR_Bild_300x300_10_22

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/