PaintShop Pro 2020 : Rebouclage de script

Les problèmes visibles et identifiés, et les autres...
Règles du forum
Important : Indiquez la version de PaintShop Pro dans le titre du sujet.
Exemple : PaintShop Pro X7 problème d'affichage de la palette couleur
Répondre
Avatar du membre
fs999
entraideur expérimenté
entraideur expérimenté
Messages : 346
Enregistré le : sept. 2015
Sexe : Homme
Localisation : Luxembourg
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

PaintShop Pro 2020 : Rebouclage de script

Message 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 PaintShop Pro. 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)
    ...
Avatar du membre
Zen-Luck
entraideur amiral
entraideur amiral
Messages : 5742
Enregistré le : juil. 2015
Sexe : Homme
Localisation : Belgique
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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 PaintShop Pro 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 ?
Avatar du membre
fs999
entraideur expérimenté
entraideur expérimenté
Messages : 346
Enregistré le : sept. 2015
Sexe : Homme
Localisation : Luxembourg
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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 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...
Avatar du membre
Zen-Luck
entraideur amiral
entraideur amiral
Messages : 5742
Enregistré le : juil. 2015
Sexe : Homme
Localisation : Belgique
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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
2020 script pas a pas.jpg (32.98 Kio) Vu 2856 fois
Avatar du membre
Zen-Luck
entraideur amiral
entraideur amiral
Messages : 5742
Enregistré le : juil. 2015
Sexe : Homme
Localisation : Belgique
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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 PaintShop Pro 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:
Avatar du membre
Zen-Luck
entraideur amiral
entraideur amiral
Messages : 5742
Enregistré le : juil. 2015
Sexe : Homme
Localisation : Belgique
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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 PaintShop Pro, à 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 ?
Avatar du membre
Zen-Luck
entraideur amiral
entraideur amiral
Messages : 5742
Enregistré le : juil. 2015
Sexe : Homme
Localisation : Belgique
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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.
Avatar du membre
fs999
entraideur expérimenté
entraideur expérimenté
Messages : 346
Enregistré le : sept. 2015
Sexe : Homme
Localisation : Luxembourg
OS : Windows 10
OS 64 bits : Oui
Version PSP : 2023 64 bits
Contact :

Re: PaintShop Pro 2020 : Rebouclage de script

Message 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...
Répondre