Hallo,
mein Problem:
mehrere Bilddateien in einem Ordner sollen mit PaintShop Pro 8 mit der Script-Funktion auf eine einheitliche Größe gebracht werden. Dies habe ich mit zwei Scripten für hochkant- und querformatige Bilder erreicht.
Hierunter das Script für Querformat:
................................................................
from JascApp import *
def ScriptProperties():
return {
'Author': u'',
'Copyright': u'',
'Description': u'',
'Host': u'Paint Shop Pro',
'Host Version': u'8.10 Try&Buy '
}
def Do(Environment):
# EnableOptimizedScriptUndo
App.Do( Environment, 'EnableOptimizedScriptUndo', {
})
# Resize
App.Do( Environment, 'Resize', {
'AspectRatio': 1.46171,
'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels,
'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn,
'Height': 388,
'MaintainAspectRatio': App.Constants.Boolean.true,
'Resample': App.Constants.Boolean.true,
'ResampleType': App.Constants.ResampleType.SmartSize,
'ResizeAllLayers': App.Constants.Boolean.true,
'Resolution': 72,
'Width': 567,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match
}
})
..........................................
Wie muss ich das Script ändern, damit es über eine Abfrage beide Bildformate mit einem Aufruf behandelt?
Etwa nach dem Muster
'If <hochkant>, dann ... else .....' bzw.
'If <Höhe größer Breite> dann ... else .....'
Ich probiere seit einem Tag, aber die Syntax hat für einen Unwissenden
ihre Tücken.
Danke und Gruß
Hajo
Abfrage-Syntax
Da gibt's so eine Schaltfläche über dem Texteingabefeld wo "python" drauf steht.
Code: Alles auswählen
def ScriptProperties():
return {
'Author': u'',
'Copyright': u'',
'Description': u'',
'Host': u'Paint Shop Pro',
'Host Version': u'8.10 Try&Buy '
}
def Do(Environment):
# EnableOptimizedScriptUndo
App.Do( Environment, 'EnableOptimizedScriptUndo', {
})
# Resize
App.Do( Environment, 'Resize', {
'AspectRatio': 1.46171,
'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels,
'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn,
'Height': 388,
'MaintainAspectRatio': App.Constants.Boolean.true,
'Resample': App.Constants.Boolean.true,
'ResampleType': App.Constants.ResampleType.SmartSize,
'ResizeAllLayers': App.Constants.Boolean.true,
'Resolution': 72,
'Width': 567,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match
}
})
Das ist wohl kaum das, was du laufen laesst. Denn in Python ist die Einrueckung wichtig, und du hast da nix eingeruecktes. Es geht weniger um die schoenen Farben, sondern darum, dass du uns deinen Code in seiner wirklichen Form zeigst.
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
Der Code ist immer noch nicht korrekt formatiert. Versuchen Sie es noch einmal.
Code: Alles auswählen
from JascApp import *
def ScriptProperties():
return {
'Author': u'',
'Copyright': u'',
'Description': u'',
'Host': u'Paint Shop Pro',
'Host Version': u'8.10 Try&Buy '
}
def Do(Environment):
# EnableOptimizedScriptUndo
App.Do( Environment, 'EnableOptimizedScriptUndo', {
})
# Resize
App.Do( Environment, 'Resize', {
'AspectRatio': 1.46171,
'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels,
'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn,
'Height': 567,
'MaintainAspectRatio': App.Constants.Boolean.true,
'Resample': App.Constants.Boolean.true,
'ResampleType': App.Constants.ResampleType.SmartSize,
'ResizeAllLayers': App.Constants.Boolean.true,
'Resolution': 72,
'Width': 388,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match
}
})
Na, geht doch.
Was ich nicht ganz verstehe: auf der einen Seite wird ein aspect-ratio gesetzt, aber dann resized du mit breite/hoehe. Das geht doch eigentlich nicht zusammen? Da sollte doch nur ein Parameter notwending sein.
Und ich verstehe die Aufgabe immer noch nicht. Das ist jetzt also ein Skript. Dann hast du wahrscheinlich noch ein zweites. Und jetzt willst du eines daraus machen, aber das soll selbst entscheiden, ob es hoch oder quer machen soll?
Was ich nicht ganz verstehe: auf der einen Seite wird ein aspect-ratio gesetzt, aber dann resized du mit breite/hoehe. Das geht doch eigentlich nicht zusammen? Da sollte doch nur ein Parameter notwending sein.
Und ich verstehe die Aufgabe immer noch nicht. Das ist jetzt also ein Skript. Dann hast du wahrscheinlich noch ein zweites. Und jetzt willst du eines daraus machen, aber das soll selbst entscheiden, ob es hoch oder quer machen soll?
Mir ist jetzt nicht wirklich klar, worin dein Problem liegt. Möchtest du wissen, wie du Höhe und Breite des Bildes herausbekommst? Das müsste in der Dokumentation des von dir verwendeten Programms zu finden sein.hajo hat geschrieben: 'If <hochkant>, dann ... else .....' bzw.
'If <Höhe größer Breite> dann ... else .....'
Ich probiere seit einem Tag, aber die Syntax hat für einen Unwissenden
ihre Tücken.
Hast du ein Problem mit if, das du auch mit der Dokumentation des if-Statements nicht lösen kannst? Dann frag bitte hier noch mal gezielt nach.
Was ich nicht ganz verstehe: auf der einen Seite wird ein aspect-ratio gesetzt, aber dann resized du mit breite/hoehe. Das geht doch eigentlich nicht zusammen? Da sollte doch nur ein Parameter notwending sein.
Und ich verstehe die Aufgabe immer noch nicht. Das ist jetzt also ein Skript. Dann hast du wahrscheinlich noch ein zweites. Und jetzt willst du eines daraus machen, aber das soll selbst entscheiden, ob es hoch oder quer machen soll?
.............................
Das Skript ist nicht selbst geschrieben, sondern von Paint Shop Pro 8 mittels Script-Recording erstellt worden.
Im Eingabe-Ordner sind Bilder im Hoch- und Querformat.
Das neue Skript soll alle hochformatigen Bilder auf eine einheitliche Höhe von 829 Pixel setzen; die Breite ergibt sich aus aspect-ratio; alle querformatigen Bilder sollen eine einheitliche Breite von 567 Pixel erhalten, die Höhe ergibt sich aus aspect-ratio.
Dafür soll es nur ein Skript geben.
Und ich verstehe die Aufgabe immer noch nicht. Das ist jetzt also ein Skript. Dann hast du wahrscheinlich noch ein zweites. Und jetzt willst du eines daraus machen, aber das soll selbst entscheiden, ob es hoch oder quer machen soll?
.............................
Das Skript ist nicht selbst geschrieben, sondern von Paint Shop Pro 8 mittels Script-Recording erstellt worden.
Im Eingabe-Ordner sind Bilder im Hoch- und Querformat.
Das neue Skript soll alle hochformatigen Bilder auf eine einheitliche Höhe von 829 Pixel setzen; die Breite ergibt sich aus aspect-ratio; alle querformatigen Bilder sollen eine einheitliche Breite von 567 Pixel erhalten, die Höhe ergibt sich aus aspect-ratio.
Dafür soll es nur ein Skript geben.
Das Problem ist gelöst; Danke an allen, die sich damit beschäftigt haben.
Falls jemand Interesse hat:
Falls jemand Interesse hat:
Code: Alles auswählen
# Sample script using ResizeToLimit
from JascApp import *
def ScriptProperties():
return {
'Author': u'Gary Barton',
'Copyright': 'Copyright © 2003 Gary Barton.',
'Description': u'Resize image to given height and width max, while maintaining aspect ratio.',
'Host': u'Paint Shop Pro',
'Host Version': u'8.01'
}
def Do(Environment):
# Default values for maximum height and width (change these to use in batch)
# A value of 0 means the width or height will not be constrained.
# DIN A4:
width = 850
height = 850
# Prompt for height and width. This won't be visible if silent execution
# is set (such as in Batch). The defaults will be used instead.
result = App.Do( Environment, 'GetNumber', {
'DefaultValue': width,
'MinValue': 0,
'MaxValue': 65535,
'DialogTitle': 'GetNumber - ResizeToLimit',
'Prompt': 'Maximum width (enter 0 for none)',
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default
}
})
if not result['OKButton']:
return
width = result['EnteredNumber']
result = App.Do( Environment, 'GetNumber', {
'DefaultValue': height,
'MinValue': 0,
'MaxValue': 65535,
'DialogTitle': 'GetNumber - ResizeToLimit',
'Prompt': 'Maximum height (enter 0 for none)',
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default
}
})
if not result['OKButton']:
return
height = result['EnteredNumber']
# Do the resize with the specified maximum height and width
ResizeToLimit(Environment, Height=height, Width=width)
# ----- ResizeToLimit Start -----
# Author: Gary Barton
# Revision: 0.2
def ResizeToLimit(Environment, Height, Width):
'''Resize image to given height and width max, while maintaining aspect ratio.'''
# If width or height was given as zero then make them unlimited else...
# If preserving the aspect ratio would push the height over the limit for
# the specified width then set width to None (i.e. tell PSP to figure it
# out). Otherwise, let PSP to figure out the height.
if Width == 0 and Height == 0:
return
if Width == 0:
Width = None
elif Height == 0:
Height = None
elif ((float(Width) / App.TargetDocument.Width) * App.TargetDocument.Height) > Height:
Width = None
else:
Height = None
App.Do( Environment, 'Resize', {
'AspectRatio': None, # Let PSP figure it out
'Height': Height,
'Width': Width,
'Resolution': 72,
'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels,
'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn,
'MaintainAspectRatio': App.Constants.Boolean.true,
'Resample': App.Constants.Boolean.true,
'ResampleType': App.Constants.ResampleType.SmartSize,
'ResizeAllLayers': App.Constants.Boolean.true,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Silent,
'AutoActionMode': App.Constants.AutoActionMode.Match
}
})
# ----- ResizeToLimit End -----