#
# Generate 100 Kaleidoscopes from a single JPG, randomizing the parameters.
# Paintshop Pro V8
#
# Sean McGrath
# http://seanmcgrath.blogspot.com
#

# PSP stuff
from JascApp import *

# Will use random number generator to make the images more interesting
import random

# Open up the file we want to work with
def OpenFile(Environment):
    App.Do( Environment, 'FileOpen', {
            'FileList': [r'c:\photo.JPG'], 
            'Folder': 'c:\\data\\', 
            'FileFormat': App.Constants.FileFormat.Unknown, 
            'ShowPreview': App.Constants.Boolean.false, 
            'EnableBrowser': App.Constants.Boolean.true, 
            'FavFileList': [], 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Silent, 
                'AutoActionMode': App.Constants.AutoActionMode.Match
                }
            })

# -1 or +1 = used later in randomizing parameters
def PlusOrMinusCoinFlip():
	if random.random() < 0.5:
		return +1
	else:
		return -1
	
# Save out a file in KPG format
def SaveAs(Environment,Filename):
	App.Do( Environment, 'FileSaveAs', {
            'Encoding': {
                'JPG': {
                    'Variant': App.Constants.JpegFormat.Standard, 
                    'CompressionFactor': 15, 
                    'ChromaSubSampling': App.Constants.ChromaSubSampling.YCC_2x2_1x1_1x1
                    }
                }, 
            'FileName': Filename, 
            'FileFormat': App.Constants.FileFormat.JPG, 
            'FormatDesc': r'JPEG - JFIF Compliant', 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.AllAlways
                }, 
            'DefaultProperties': []
            })

# Close current file
def CloseFile(Environment):
	App.Do( Environment, 'FileClose', {
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match
                }
            })

# Turn current image into a funky Kaleidoscope
def Kaleidoscope(Environment):
	App.Do( Environment, 'Kaleidoscope', {
            'Angle': int(random.random() * 360), 
            'HorizontalOffset': int(random.random() * 100) * PlusOrMinusCoinFlip(), 
            'Scale': int(random.random() * 90) * PlusOrMinusCoinFlip(), 
            'VerticalOffset': int(random.random() * 100) * PlusOrMinusCoinFlip(), 
            'NumOrbits': int(random.random() * 5), 
            'RadialSuction': int(random.random() * 100), 
            'NumPetals': 2 + int(random.random() * 19), 
            'EdgeMode': App.Constants.EdgeMode.Background, 
            'FillColor': (255,255,255), 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match
                }
            })

# Standard PSP callback
def ScriptProperties():
    return {
        'Author': '',
        'Copyright': '',
        'Description': '',
        'Host': 'Paint Shop Pro',
        'Host Version': '8.00'
        }


# Standard PSP entry point - 100 Kaleidoscopes
def Do(Environment):
	for i in range (1,100):
		OpenFile(Environment)
		Kaleidoscope(Environment)
		SaveAs(Environment,'d:\\kaleidoscopes\%d.jpg' % i)
		CloseFile(Environment)