I've spent the day working on a script that will separate an image into the 10 zones of the system, and while it is still a work in progress, this script is working for me in its present iteration:
Code: Select all
from PSPApp import *
def ScriptProperties():
return {
'Author': u'GBotes',
'Copyright': u'2015. Please use, share and modify freely.',
'Description': u'Split an image into zones according to Ansel Adams Zone System and save each zone to an alpha channel',
'Host': u'PaintShop Pro',
'Host Version': u'18.00'
}
def Do(Environment):
# EnableOptimizedScriptUndo
App.Do( Environment, 'EnableOptimizedScriptUndo', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Set tolerance and softness to the user input value.
# For this purpose there doesn't seem to be much purpose
# in setting different values.
Result = App.Do( Environment, 'GetNumber', {
'DefaultValue': 8,
'MinValue': 1,
'MaxValue': 255,
'DialogTitle': 'Set softness and tolerance',
'Prompt': 'Click OK to use default',
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Interactive
}
})
# LayerDuplicate
App.Do( Environment, 'LayerDuplicate', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Color Adjust HSL
App.Do( Environment, 'ColorAdjustHSL', {
'HSL': {
'Colorize': False,
'Master': (0,-100,0),
'MasterColorize': (0,0,0),
'Red': (0,0,0,315,345,15,45),
'Green': (0,0,0,75,105,135,165),
'Blue': (0,0,0,195,225,255,285),
'Cyan': (0,0,0,135,165,195,225),
'Magenta': (0,0,0,255,285,315,345),
'Yellow': (0,0,0,15,45,75,105)
},
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone 0 (0)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (0,0,0),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone 0 (0)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone I (1)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (25,25,25),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone I (1)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone II (2)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (51,51,51),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone II (2)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone III (3)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (76,76,76),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone III (3)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone IV (4)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (102,102,102),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone IV (4)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone V (5)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (127,127,127),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone V (5)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone VI (6)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (153,153,153),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone VI (6)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone VII (7)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (178,178,178),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone VII (7)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone VIII (8)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (204,204,204),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone VIII (8)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone IX (9)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (229,229,229),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone IX (9)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectAll
App.Do( Environment, 'SelectAll', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# Select Color Range Zone X (10)
App.Do( Environment, 'SelectColorRange', {
'Action': App.Constants.ColorRangeAction.Subtract,
'ReferenceColor': (255,255,255),
'Softness': Result,
'Tolerance': Result,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectInvert
App.Do( Environment, 'SelectInvert', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectSaveAlpha
App.Do( Environment, 'SelectSaveAlpha', {
'SourceImage': 0,
'AlphaName': u'Zone X (10)',
'Overwrite': True,
'UpperLeft': False,
'AlphaIndex': 0,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# SelectNone
App.Do( Environment, 'SelectNone', {
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Default,
'AutoActionMode': App.Constants.AutoActionMode.Match,
}
})
# MultiObjectProperties
App.Do( Environment, 'MultiObjectProperties', {
'General': {
'Opacity': None,
'Name': None,
'IsVisible': None,
'IsTransparencyLocked': None,
'LinkSet': None,
'UseHighlight': None,
'PaletteHighlightColor': None,
'GroupLink': None,
'BlendMode': App.Constants.BlendMode.TrueLuminance
},
'Effects': None,
'WorkingMode': 1,
'Path': None,
'GeneralSettings': {
'ExecutionMode': App.Constants.ExecutionMode.Silent,
'AutoActionMode': App.Constants.AutoActionMode.AllAlways,
}
})
I have tested this script on several images, and I have had one failure where the script broke. It was on a severely underexposed image, and the script failed because it was not able to find a selection range for one of the zones. If this happens on one of your images, then this script won't work on that image - I don't have a solution for this problem, and suspect there isn't one. However, the script ran fine on all my other images, and allowed me to make some useful tweaks to image tones by brightening and darkening zones selectively.
