from JascApp import *

# Change this to set the compression quality of the image
compression = 15
	
def ScriptProperties():
	return {
		'Author': u'Neil Moomey',
		'Copyright': u'Neil Moomey',
		'Description': u'ASONP Batch Image Resizer Script',
		'Host': u'Paint Shop Pro',
		'Host Version': u'8.10'
		}

def Do(Environment):
	# EnableOptimizedScriptUndo
	App.Do( Environment, 'EnableOptimizedScriptUndo', {
            
			})
	#Clear window
	App.Do( Environment, 'ScriptWndClear' )
		
	while App.ActiveDocument:
	
		#Create image 500 pixes wide or high max
		MaxThumbnailSize=500
		print'File is: ' + App.ActiveDocument.Name
		filenameWithoutExt=App.ActiveDocument.Name.split(".")[0]
		fname = filenameWithoutExt + '_' + str(MaxThumbnailSize) + '.jpg'
		
		# compute the width and the height of image, preserving the aspect ratio
		ImageInfo = App.Do( Environment, 'ReturnImageInfo' )
		Width = ImageInfo['Width']
		Height = ImageInfo['Height']
		Title = ImageInfo['Title']
		
		if Width <= MaxThumbnailSize and Height <= MaxThumbnailSize:
			print 'Document %s smaller than requested thumbnail - no change made' % ( Title )
			return
		elif Width > Height:
			NewWidth  = MaxThumbnailSize
			NewHeight = MaxThumbnailSize * float(Height) / float(Width)
		else:   # height > width
			NewHeight = MaxThumbnailSize
			NewWidth  = MaxThumbnailSize * float(Width) / float(Height)
	
		print 'Document %s resized to %d x %d' % ( Title, NewWidth, NewHeight )
	
		App.Do( Environment, 'Resize', {
				'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
				'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
				'MaintainAspectRatio': App.Constants.Boolean.true, 
				'OriginalDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
				'OriginalResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
				'Resample': App.Constants.Boolean.true, 
				'ResampleType': App.Constants.ResampleType.SmartSize, 
				'ResizeAllLayers': App.Constants.Boolean.true, 
				'Resolution': 100.000, 
				'Width': NewWidth, 
				'Height': NewHeight, 
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Silent, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}
				})
	
		# NormalViewing
		App.Do( Environment, 'NormalViewing', {
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Default, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}
				})
	
		# FileSaveAs
		App.Do( Environment, 'FileSaveCopyAs', {
				'Encoding': {
					'JPG': {
						'Variant': App.Constants.JpegFormat.Standard, 
						'CompressionFactor': compression, 
						'ChromaSubSampling': App.Constants.ChromaSubSampling.YCC_2x2_1x1_1x1
						}
					}, 
				'FileName': fname,
				'FileFormat': App.Constants.FileFormat.JPG, 
				'FormatDesc': u'JPEG - JFIF Compliant', 
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Silent, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}, 
				'DefaultProperties': []
				})

		#Repeat for thumbnail
		
		MaxThumbnailSize=100
		print'File is: ' + App.ActiveDocument.Name
		filenameWithoutExt=App.ActiveDocument.Name.split(".")[0]
		fname = filenameWithoutExt + '_thumbnail' + '.jpg'
		
		# compute the width and the height of image, preserving the aspect ratio
		ImageInfo = App.Do( Environment, 'ReturnImageInfo' )
		Width = ImageInfo['Width']
		Height = ImageInfo['Height']
		Title = ImageInfo['Title']
		
		if Width <= MaxThumbnailSize and Height <= MaxThumbnailSize:
			print 'Document %s smaller than requested thumbnail - no change made' % ( Title )
			return
		elif Width > Height:
			NewWidth  = MaxThumbnailSize
			NewHeight = MaxThumbnailSize * float(Height) / float(Width)
		else:   # height > width
			NewHeight = MaxThumbnailSize
			NewWidth  = MaxThumbnailSize * float(Width) / float(Height)
	
		print 'Document %s resized to %d x %d' % ( Title, NewWidth, NewHeight )
	
		App.Do( Environment, 'Resize', {
				'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
				'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
				'MaintainAspectRatio': App.Constants.Boolean.true, 
				'OriginalDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
				'OriginalResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
				'Resample': App.Constants.Boolean.true, 
				'ResampleType': App.Constants.ResampleType.SmartSize, 
				'ResizeAllLayers': App.Constants.Boolean.true, 
				'Resolution': 100.000, 
				'Width': NewWidth, 
				'Height': NewHeight, 
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Silent, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}
				})
	
		# NormalViewing
		App.Do( Environment, 'NormalViewing', {
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Default, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}
				})
				
		# Sharpen
		App.Do( Environment, 'Sharpen', {
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Default, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}
				})
				
		# FileSaveAs
		App.Do( Environment, 'FileSaveCopyAs', {
				'Encoding': {
					'JPG': {
						'Variant': App.Constants.JpegFormat.Standard, 
						'CompressionFactor': compression, 
						'ChromaSubSampling': App.Constants.ChromaSubSampling.YCC_2x2_1x1_1x1
						}
					}, 
				'FileName': fname,
				'FileFormat': App.Constants.FileFormat.JPG, 
				'FormatDesc': u'JPEG - JFIF Compliant', 
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Silent, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}, 
				'DefaultProperties': []
				})
		
		# FileClose
		App.Do( Environment, 'FileClose', {
				'GeneralSettings': {
					'ExecutionMode': App.Constants.ExecutionMode.Silent, 
					'AutoActionMode': App.Constants.AutoActionMode.Match
					}
				})





