在PaintShop Pro的脚本中使用“SaveAs”

2024-06-30 11:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在PaintShop Pro上自动执行一些图像编辑任务。简单地说,我想手动将图像从当前位置加载到PSP中,然后在图像上运行脚本以调整大小,然后在画布上调整大小,最后在其原始位置以新名称(交互方式)保存生成的文件

我现有的脚本如下:

from PSPApp import *

def ScriptProperties():
    return {
        'Author': u'',
        'Copyright': u'',
        'Description': u'',
        'Host': u'PaintShop Pro',
        'Host Version': u'21.00'
        }

def Do(Environment):
    # EnableOptimizedScriptUndo
    App.Do( Environment, 'EnableOptimizedScriptUndo', {
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((21,0,0),1)
                }
            })

    # Resize
    App.Do( Environment, 'Resize', {
            'AspectRatio': 0.997183, 
            'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
            'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
            'Height': 251, 
            'MaintainAspectRatio': True, 
            'Resample': True, 
            'ResampleType': App.Constants.ResampleType.Bicubic, 
            'ResizeAllLayers': True, 
            'Resolution': 499, 
            'Width': 250, 
            'SharpnessValue': 50, 
            'AdvancedMode': True, 
            'ResizeType': 0, 
            'OneSide_Type': 0, 
            'OneSide_LongWidth': 657, 
            'OneSide_ShortHeight': 655, 
            'OneSide_Unit': App.Constants.UnitsOfMeasure.Pixels, 
            'OneSide_Active': 0, 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((21,0,0),1)
                }
            })

    # ResizeCanvas
    App.Do( Environment, 'ResizeCanvas', {
            'AspectRatio': 0.996016, 
            'FillColor': (9,7,10), 
            'HoriPlace': App.Constants.HorizontalType.Center, 
            'MaintainAspect': False, 
            'NewDimUnits': App.Constants.UnitsOfMeasure.Pixels, 
            'NewHeight': 250, 
            'NewWidth': 250, 
            'PlaceBottom': -1, 
            'PlaceLeft': 0, 
            'PlaceRight': 0, 
            'PlaceTop': 0, 
            'VertPlace': App.Constants.VerticalType.Center, 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((21,0,0),1)
                }
            })

    # FileSaveAs
    App.Do( Environment, 'FileSaveAs', {
            'Encoding': {
                'JPG': {
                    'Variant': App.Constants.JpegFormat.Lossless, 
                    'CompressionFactor': 20, 
                    'ChromaSubSampling': App.Constants.ChromaSubSampling.YCC_1x1_1x1_1x1, 
                    'EXIF': True, 
                    'EmbedJPGICC': True
                    }
                }, 
            'FileName': u'00.jpg', 
            'FileFormat': App.Constants.FileFormat.JPG, 
            'FormatDesc': u'JPG JPEG ', 
            'WorkingMode': 0, 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Interactive, 
                'AutoActionMode': App.Constants.AutoActionMode.PromoteAsk, 
                'Version': ((21,0,0),1)
                }, 
            'DefaultProperties': []
            })

在我进入FileSaveAs步骤之前,这一切都很好。当前脚本将文件保存到脚本的当前工作目录,而不是我正在处理的图像文件的目录。(注意:我将模式设置为Interactive,因此我有机会在Interactive SaveAs对话框中重命名该文件)

任何帮助都将受到感激。说到脚本,我是个新手

更新! 我通过添加

path = App.TargetDocument.Name.rstrip(App.TargetDocument.Title)
    filename = path + "00_" + App.TargetDocument.Title 

所以新的剧本是这样的

from PSPApp import *

def ScriptProperties():
    return {
        'Author': u'',
        'Copyright': u'',
        'Description': u'',
        'Host': u'PaintShop Pro',
        'Host Version': u'21.00'
        }

def Do(Environment):
    path = App.TargetDocument.Name.rstrip(App.TargetDocument.Title)
    filename = path + "00_" + App.TargetDocument.Title
    # EnableOptimizedScriptUndo
    App.Do( Environment, 'EnableOptimizedScriptUndo', {
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((21,0,0),1)
                }
            })

    # Resize
    App.Do( Environment, 'Resize', {
            'AspectRatio': 0.997183, 
            'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
            'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
            'Height': 251, 
            'MaintainAspectRatio': True, 
            'Resample': True, 
            'ResampleType': App.Constants.ResampleType.Bicubic, 
            'ResizeAllLayers': True, 
            'Resolution': 499, 
            'Width': 250, 
            'SharpnessValue': 50, 
            'AdvancedMode': True, 
            'ResizeType': 0, 
            'OneSide_Type': 0, 
            'OneSide_LongWidth': 657, 
            'OneSide_ShortHeight': 655, 
            'OneSide_Unit': App.Constants.UnitsOfMeasure.Pixels, 
            'OneSide_Active': 0, 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((21,0,0),1)
                }
            })

    # ResizeCanvas
    App.Do( Environment, 'ResizeCanvas', {
            'AspectRatio': 0.996016, 
            'FillColor': (9,7,10), 
            'HoriPlace': App.Constants.HorizontalType.Center, 
            'MaintainAspect': False, 
            'NewDimUnits': App.Constants.UnitsOfMeasure.Pixels, 
            'NewHeight': 250, 
            'NewWidth': 250, 
            'PlaceBottom': -1, 
            'PlaceLeft': 0, 
            'PlaceRight': 0, 
            'PlaceTop': 0, 
            'VertPlace': App.Constants.VerticalType.Center, 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((21,0,0),1)
                }
            })

    # FileSaveAs
    App.Do( Environment, 'FileSaveAs', {
            'Encoding': {
                'JPG': {
                    'Variant': App.Constants.JpegFormat.Lossless, 
                    'CompressionFactor': 0, 
                    'ChromaSubSampling': App.Constants.ChromaSubSampling.YCC_1x1_1x1_1x1, 
                    'EXIF': True, 
                    'EmbedJPGICC': True
                    }
                }, 
            'FileName': filename, 
            'FileFormat': App.Constants.FileFormat.JPG, 
            'FormatDesc': u'JPG JPEG ', 
            'WorkingMode': 0, 
            'GeneralSettings': {
                'ExecutionMode': App.Constants.ExecutionMode.Default, 
                'AutoActionMode': App.Constants.AutoActionMode.Match, 
                'Version': ((23,0,0),1)
                }, 
            'DefaultProperties': []
            })

我现在有一个补充问题,也许有人可以就此向我提出建议。为了使上面的脚本运行而不需要我的交互(重命名文件),我想找到一种方法,根据模板重命名要保存的文件。在上面的脚本中,我已经在原始文件名的前面添加了“00”,但我还想删除原始文件名末尾的任何数字字符。例如,我希望Landscape1.jpg或Landscape22.jpg或Landscape333.jpg等保存为00_scape.jpg。。。有什么想法吗


Tags: 脚本trueappdefaultenvironmentversionmatchdo
1条回答
网友
1楼 · 发布于 2024-06-30 11:26:01

我想对你的策略提出一些不同的建议。 请看我使用的代码。在这段代码中,Paintshop Pro将给出一个类似Image1.jpg等的名称。此外,您可以从文本编辑器控制所有过程,因为从长远来看,它更容易、更快。我没有包括交互模式,但让我们从这个开始,看看您喜欢它:-) 我还删除了很多Paintshop Pro代码,因为它更容易阅读,而且仍然可以正常工作。我只是想确认一下,没问题

from PSPApp import *

def ScriptProperties(): return { }

def Do(Environment):

    # do the math for the crop
    size_height = 1000
    size_width = 500

    crop_height = 500
    crop_width = 250
    place_bottom = 250 
    place_left =  125
    place_right =  125
    place_top = 250

    
    # assign a variable to the folder containing your file eg:
    #insert path here:
    source_path = u'C:\\photos\\flowers\\flower1\\' # your original file is here
    source_image = 'rose.jpg' # your original file name
    
    destination_folder = u'C:\\photos\\flowers\\flower1\\crop\\'

    # FileOpen
    App.Do( Environment, 'FileOpen', {
            'FileList': [source_path + source_image], 
            'Folder': source_path, 
            })

    # SelectDocument
    App.Do( Environment, 'SelectDocument' )

    # Resize
    App.Do( Environment, 'Resize', {
            'AspectRatio': 0.997183, 
            'CurrentDimensionUnits': App.Constants.UnitsOfMeasure.Pixels, 
            'CurrentResolutionUnits': App.Constants.ResolutionUnits.PixelsPerIn, 
            'Height': size_height, 
            'MaintainAspectRatio': True, 
            'Resample': True, 
            'ResampleType': App.Constants.ResampleType.Bicubic, 
            'ResizeAllLayers': True, 
            'Resolution': 499, 
            'Width': size_width, 
            'SharpnessValue': 50, 
            'AdvancedMode': True, 
            'ResizeType': 0, 
            'OneSide_Type': 0, 
            'OneSide_LongWidth': 657, 
            'OneSide_ShortHeight': 655, 
            'OneSide_Unit': App.Constants.UnitsOfMeasure.Pixels, 
            'OneSide_Active': 0, 
            })

    # ResizeCanvas
    App.Do( Environment, 'ResizeCanvas', {
            'AspectRatio': 0.996016, 
            'FillColor': (9,7,10), 
            'HoriPlace': App.Constants.HorizontalType.Center, 
            'MaintainAspect': False, 
            'NewDimUnits': App.Constants.UnitsOfMeasure.Pixels, 
            'NewHeight': crop_height, 
            'NewWidth': crop_width, 
            'PlaceBottom': place_bottom, 
            'PlaceLeft': place_left, 
            'PlaceRight': place_right, 
            'PlaceTop': place_top, 
            'VertPlace': App.Constants.VerticalType.Center, 
            })


    # at this point, I prefer to copy and paste as new image
    # or copy-merged and paste as a new image
    # because I can conrol everything from the script editor (I use Notepad++)
    # plus, in the long run, it saves time    # Copy
    App.Do( Environment, 'Copy' )

    # CopyMerged >> used for copying multi-layer images
    # App.Do( Environment, 'CopyMerged' )

    # PasteGraphicAsNewImage
    App.Do( Environment, 'PasteGraphicAsNewImage' )

    # SelectDocument new image
    App.Do( Environment, 'SelectDocument' )

    name = App.ActiveDocument.Title

    # FileSaveAs
    App.Do( Environment, 'FileSaveAs', {
            'Encoding': {
                'JPG': {
                    'Variant': App.Constants.JpegFormat.Lossless, 
                    'CompressionFactor': 20, 
                    'ChromaSubSampling': App.Constants.ChromaSubSampling.YCC_1x1_1x1_1x1, 
                    'EXIF': True, 
                    'EmbedJPGICC': True
                    }
                }, 
            'FileName': destination_folder + name + '.jpg', 
            'FileFormat': App.Constants.FileFormat.JPG, 
            'FormatDesc': u'JPG JPEG ', 
            'WorkingMode': 0, 
            'DefaultProperties': []
            })

    # FileClose the new image
    App.Do( Environment, 'FileClose' )

    # SelectDocument the source_image
    App.Do( Environment, 'SelectDocument' )

    # FileClose the source_image
    App.Do( Environment, 'FileClose' )

    # SelectDocument
    App.Do( Environment, 'SelectDocument' )

相关问题 更多 >