vendredi 3 janvier 2014

Automatisation de photoshop autoit jsx

Voici quelques informations sur l'automatisation de photoshop,
j'ai trouvé le moyen de lancer des actions photoshop vià un script autoit grace à cette commande :
ShellExecute($Rep_traitement & "/javascripts/DoActionPlanche.jsx")

Cette commande lance un fichier .jsx dont l'exécution par défaut de windows est associée à photoshop,
voici le contenu du fichier .jsx

#target Photoshop
main();
function main(){
app.doAction('planche4', 'planche');
  return;}


Il suffit donc de créer une action photoshop (ici planche4 dans le répertoire d'actions planche)

ensuite, voici le contenu de l'ensemble de mon fichier autoit

;~ IMPORTANT : définir l'ouverture des fichiers JSX par défaut dans Windows
SoundPlay(@WindowsDir & "\media\tada.wav", 1)
Global $Rep_traitement = "c:/testsphoto"

Ps_Open()

Beep(300,100)
Beep(600,100)
Beep(900,100)
Beep(1200,100)
Beep(1500,100)

For $i = 0 To 3

evaluation_dossier()
movedefile()
Photo_Solo_Effect()
Next
Beep(500,100)

Beep(500,100)


Beep(500,100)

Local $randomArchive = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC
;~ & Random (100000, 999999,1)

Planche_contact()

;~ Ps_close()
Rangement_archive()
DS80folder()
Beep(1500,100)
Beep(1200,100)
Beep(900,100)
Beep(600,100)
Beep(300,500)

Func evaluation_dossier()

Local $repertoire = "c:/testsphoto/dimension"
Local $var = DirGetSize( "c:/testsphoto/dimension")
Local $stable = 0
Local $boucleeval = 500
While ($var=0 OR $stable=0)
;Actions à effectuer
$boucleeval = $boucleeval - 1
If ($boucleeval<1) Then
ExitLoop
EndIf
$var = DirGetSize( "c:/testsphoto/dimension")
Sleep(1500)

$var2 = DirGetSize( "c:/testsphoto/dimension")


If ($var <> $var2) Then

;MsgBox(1, "mouvement en cours", $var & "----" & $var2, 3)
$stable = 0
Else
;MsgBox(1, "dossier stable", $var & "----" & $var2, 3)
$stable = 1
EndIf
WEnd
EndFunc
Func movedefile()
Beep(300,1000)
;MsgBox(1, "ok dossier non vide", $var & "----" & $var2, 3)
Local $hSearch = FileFindFirstFile($Rep_traitement & "/dimension/*.*")
Local $sFileName = FileFindNextFile($hSearch)
;MsgBox(1, "nom du fichier 1 dans le dossier", $sFileName)
FileMove($Rep_traitement & "/dimension/" & $sFileName, $Rep_traitement & "/dimension2/" & "photo" & $i & ".jpg",9)

;~ If ($i=0) Then

;~ ShellExecute('/javascripts/DoActionSoloNb.jsx')
;~ sleep(10000)
;~ EndIf

EndFunc


Func Photo_Solo_Effect()

Switch $i
        Case 0
            ShellExecute($Rep_traitement & "/javascripts/DoActionSoloNb.jsx")
Sleep (5000)
Beep(500,100)
        Case 1
ShellExecute($Rep_traitement & "/javascripts/DoActionSoloSepia.jsx")
Sleep (5000)
Beep(2000,100)

        Case 2

ShellExecute($Rep_traitement & "/javascripts/DoActionSoloLogo.jsx")
Sleep (5000)
Beep(2000,100)
Beep(2500,100)
Case 3
Beep(2000,100)
Beep(2500,100)
Beep(2000,100)

Case Else

Beep(2000,100)
Beep(2500,100)
Beep(2000,100)
Beep(2000,100)
Beep(2500,100)
Beep(2000,100)
EndSwitch
EndFunc

Func Ps_Open()

Local $oPs = ObjCreate("Photoshop.Application")
If Not IsObj($oPs) Then Return -1
Return $oPs

EndFunc

Func Planche_contact()
SoundPlay(@WindowsDir & "\media\tada.wav", 1)

;~ nécessite que les fichiers jsx soient ouverts avec photoshop par défaut dans Windows

ShellExecute($Rep_traitement & "/javascripts/DoActionPlanche.jsx")
Sleep(20000)
EndFunc
Func Ps_close()

Beep(2000,100)


Beep(1000,100)


Beep(1000,100)

WinClose("[CLASS:Photoshop]", "")
EndFunc

Func Rangement_archive()



For $i2 = 0 To 3

Local $hSearch2 = FileFindFirstFile("c:/testsphoto/dimension2/*.*")
Local $sFileName2 = FileFindNextFile($hSearch2)
Sleep (100)

FileMove($Rep_traitement & "/dimension2/" & $sFileName2, $Rep_traitement & "/archive/" & "photo_" & $randomArchive & "_" & $i2 & ".jpg",9)

Next
EndFunc


Func DS80folder()


Local $hSearch3 = FileFindFirstFile($Rep_traitement & "/dimension3/*.*")

Local $sFileName3 = FileFindNextFile($hSearch3)
Sleep (100)
Local $Random4 = Random (100000, 999999,1)
FileMove($Rep_traitement & "/dimension3/" & $sFileName3, $Rep_traitement & "/impression/" & "planche4" & $randomArchive & ".jpg",9)
;~ Répertoire de Hotfolder DS80 commenté
;~ FileMove("c:/testsphoto/dimension3/" & $sFileName3, "C:\DNP\Hot Folder Print Utility\Prints\8x12",9)
EndFunc


;~---------------------------------------------------------------------------



Ce script commence par lancer photoshop puis il surveille un répertoire(dimension),
il déplace ensuite les fichiers un à un dans un autre répertoire (dimension2)
Cette boucle est effectuée 4 fois et les 3 premières fois, une action est lancée sur chaque photo (noir et blanc, sépia, insertion d'un logo...)
Ensuite, les quatre photos sont regroupée dans une planche contact dans le répertoire dimension3

Puis vient l'archivage, deplacement des photos du répertoire dimension2 vers archive
et déplacement de la planche contact vers le répertoire impression.

Le répertoire impression est associé à l'utilitaire hotfolder de la DS80 afin d'imprimer immédiatement la planche contact mais on peut aussi envisager de lancer une impression directement via photoshop.

Ce script doit pouvoir être adapté facilement sur Mac avec automator.


----------------------------------------------------------------------------------

voici l'adresse d'une personne qui a essayé de rendre les fenetre GUI de autoit noire (sans utiliser le thème Windows) et qui récupère la taille des images traitées aussi
http://www.autoitscript.com/forum/topic/112722-gui-background-color-and-transparent-jpg/


Aucun commentaire:

Enregistrer un commentaire