Abfrage-Syntax

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Setzt das doch bitte in Python-Tags, damit man das halbwegs lesen kann...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Python-Tags?
Gern, aber wie? fragt der Unwissende!
BlackJack

Da gibt's so eine Schaltfläche über dem Texteingabefeld wo "python" drauf steht.
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

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
}
})
deets

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.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Der Code ist immer noch nicht korrekt formatiert. Versuchen Sie es noch einmal. :)
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

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
                }
            })

deets

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?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
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.

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.
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

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.
hajo
User
Beiträge: 23
Registriert: Samstag 30. April 2011, 11:01

Das Problem ist gelöst; Danke an allen, die sich damit beschäftigt haben.
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 -----

Antworten