Page 1 sur 1

PaintShop Pro 2020 : Rebouclage de script

Posté : 27 juil. 2020, 16:09
par fs999
J'ai de plus en plus de problème pour exécuter un script, qui doit enregistrer ma photo à deux endroits, après un traitement assez long.
Cela doit être tout au début du script qu'il reboucle et impossible à l'arrêter par la barre d'outils, je dois cliquer sur le menu Fichier-Script-Arrêter.
Ensuite j'essaie quand même d'enregistrer une copie de mon travail en tif. Le fichier s'enregistre, mais pas correctement.
Il faut ensuite que je ferme et rouvre PSP. Voilà le résultat :
Save.png
La première photo en bas c'est celle que j'ai ouvert pour traiter (DNG) et la seconde la copie enregistrée en tif. Mais ça n'arrive pas tout le temps...

Voici le début de mon script

Code : Tout sélectionner

from PSPApp import *
import PSPUtils
import os


def ScriptProperties():
    return {
        'Author': u'F.Schneider',
        'Copyright': u'2014-2019 Copyright by F.Schneider',
        'Description': u'',
        'Host': u'PaintShop Pro',
        'Host Version': u'21.00'
        }

def GetCurrentLayerName( Environment, Doc ):
    # Returns the name of the current layer in Doc
    LayerInfo = App.Do( Environment, 'ReturnLayerProperties', {}, Doc )
    return LayerInfo[ 'General' ][ 'Name' ]

def getsize(filename):
    # Return the size of a file, reported by os.stat().
    return os.stat(filename).st_size

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

    if PSPUtils.RequireADoc( Environment ) == False:
      return

    if App.ActiveDocument.Name == '':
      Size = 0
    else:       
      Size = getsize(App.ActiveDocument.Name)
      
    Width = App.ActiveDocument.Width
    Height = App.ActiveDocument.Height
    FName = App.ActiveDocument.Name
    Props = App.Do( Environment, 'ReturnLayerProperties' )
    PathBack = Props[ 'Path' ]
    FoundLayer = True 
    while FoundLayer == True: 
Il n'arrive pas jusqu'ici car la couche active ne change pas !

Code : Tout sélectionner

      FoundLayer = App.Do( Environment, 'SelectPreviousLayer', {
          'GeneralSettings': {
              'ExecutionMode': App.Constants.ExecutionMode.Silent, 
              'AutoActionMode': App.Constants.AutoActionMode.Match, 
              'Version': ((19,0,0),1)
              }
          })
    FoundLayer = App.Do( Environment, 'SelectNextLayer', {
          'GeneralSettings': {
              'ExecutionMode': App.Constants.ExecutionMode.Silent, 
              'AutoActionMode': App.Constants.AutoActionMode.Match, 
              'Version': ((19,0,0),1)
              }
          })
    FoundLayer = True
    LayerName = ''
    while FoundLayer == True:
      LayerName = GetCurrentLayerName( Environment, App.TargetDocument)
    ...

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 27 juil. 2020, 18:48
par Zen-Luck
Je ne m'y connais pas suffisamment en scripts.
Ma réflexion est donc purement théorique, mais cela pourra peut-être t'inspirer quelque chose...

J'essaie de comprendre tes étapes.
- Tu fais un traitement sur une image
- Tu l'enregistres
- Tu lui appliques un autre traitement
- Tu l'enregistres (ailleurs)
Pour ce faire, tu crées une boucle.

N'est-ce pas une boucle infinie ?

Au lieu de boucler, ne peux-tu dissocier les deux traitements et les appliquer l'un après l'autre, sans boucle ? Moins élégant mais peut-être plus facilement exécutable ?

Dans PSP 2020, il y a l'option "Exécuter plusieurs scripts". On peut exécuter successivement des scripts séparés sans devoir les mettre dans un seul script. Ne serait-ce pas une piste à explorer ?

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 28 juil. 2020, 11:42
par fs999
Non je ne créé pas de boucle c'est l'un après l'autre.
Il y a juste une boucle pour savoir le nom des couches et changer le nom du fichier en concéquence.
Mais je pense qu'il n'arrive pas jusque là...
C'est dommage qu'il n'y a pas moyen d'exécuter un script pas à pas...
Je vais essayer de mettre des msgbox...

Et quid du fichier tif illisible ?

Un autre problème, c'est qu'après ça PSP ne se ferme pas correctement, il reste en tâche de fond, qu'il faut supprimer dans le gestionnaire de tâches sinon il ne démarre plus...

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 28 juil. 2020, 11:52
par Zen-Luck
fs999 a écrit : 28 juil. 2020, 11:42 C'est dommage qu'il n'y a pas moyen d'exécuter un script pas à pas...
Et ceci ?
2020 script pas a pas.jpg

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 28 juil. 2020, 11:56
par Zen-Luck
fs999 a écrit : 28 juil. 2020, 11:42 Un autre problème, c'est qu'après ça PaintShop Pro ne se ferme pas correctement, il reste en tâche de fond, qu'il faut supprimer dans le gestionnaire de tâches sinon il ne démarre plus...
C'est un problème récurrent de PSP auprès de beaucoup d'utilisateurs et dans des circonstances différentes des tiennes.
Les raisons sont multiples.
Corel est au courant mais j'ignore quand ils vont s'en occuper. :grat:

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 28 juil. 2020, 12:01
par Zen-Luck
fs999 a écrit : 28 juil. 2020, 11:42 Et quid du fichier tif illisible ?
Je dis peut-être une bêtise, mais sur le forum anglophone, il y a eu récemment plusieurs plaintes d'utilisateurs à propos de problèmes d'enregistrement de fichiers, de fichiers illisibles, etc. Cela pourrait coïncider avec une récente mise à jour de Windows. Vu que PSP, à présent, repose sur beaucoup d'éléments de Windows, un changement dans Windows pourrait plus facilement l'affecter.
Si l'enregistrement est fait en BMP au lieu de TIF, le problème subsiste ?

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 29 juil. 2020, 12:22
par Zen-Luck
Le résultat anormal en TIF vient peut-être de la profondeur de couleur. Je vois sur ta capture que l'image est en 48bit.

Re: PaintShop Pro 2020 : Rebouclage de script

Posté : 30 juil. 2020, 19:43
par fs999
Je pense avoir trouvé !

Cela n'arrive que si j'enregistre une sélection dans le canal Alpha !

Code : Tout sélectionner

        FoundLayer = True
        while FoundLayer == True: 
          FoundLayer = App.Do( Environment, 'SelectPreviousLayer', {
              'GeneralSettings': {
                  'ExecutionMode': App.Constants.ExecutionMode.Silent, 
                  'AutoActionMode': App.Constants.AutoActionMode.Match, 
                  'Version': ((19,0,0),1)
                  }
              })
La fonction SelectePreviousLayer renvoie toujours True, c'est pour cela que le script ne sort pas de cette boucle !

Et je pense que c'est ce canal Alpha qui verolle le fichier Tif. L'enregistrement en jpeg ne pose pas de problème...