from JascApp import * # Set contants ResizeTo = 2048 def ScriptProperties(): return { 'Author': u'Andrew J. Hardwick, 2004/4/21', 'Copyright': u'GPL', 'Description': u'Shrink image to 2048 pixels in maximum extent preserving aspect ratio & adapting resolution correctly.', 'Host': u'Paint Shop Pro 8', 'Host Version': u'8.10' } def Do(Environment): # EnableOptimizedScriptUndo App.Do(Environment,'EnableOptimizedScriptUndo',{}) # Get image parameters ImageInformation=App.Do(Environment,'ReturnImageInfo') WidthFrom=ImageInformation['Width'] HeightFrom=ImageInformation['Height'] ResolutionFrom=ImageInformation['PixelsPerUnit'] UnitFrom=ImageInformation['Unit'] # Abort if already small enough if WidthFrom<=ResizeTo and HeightFrom<=ResizeTo: return # Convert unit from read to write format if UnitFrom=='Centimeters': # NB USA spelling UnitTo=App.Constants.ResolutionUnits.PixelsPerCM else: UnitTo=App.Constants.ResolutionUnits.PixelsPerIn # Work out what to resize it to if WidthFrom>HeightFrom: WidthTo=ResizeTo HeightTo=float(ResizeTo)*float(HeightFrom)/float(WidthFrom) else: HeightTo=ResizeTo WidthTo=float(ResizeTo)*float(WidthFrom)/float(HeightFrom) # Work out new resolution ResolutionTo=ResolutionFrom*float(WidthTo)/float(WidthFrom) # Rescale App.Do( Environment, 'Resize', { 'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 'CurrentResolutionUnits': UnitTo, 'MaintainAspectRatio': App.Constants.Boolean.true, 'FromDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 'FromResolutionUnits': UnitTo, 'Resample': App.Constants.Boolean.true, 'ResampleType': App.Constants.ResampleType.SmartSize, 'ResizeAllLayers': App.Constants.Boolean.true, 'Resolution': ResolutionTo, 'Width':WidthTo, 'Height':HeightTo, 'GeneralSettings': { 'ExecutionMode': App.Constants.ExecutionMode.Silent, 'AutoActionMode': App.Constants.AutoActionMode.Match } })