Redimensionnement images à partir d'une image de référence

Kerdaven

Membre confirmé
26 Juin 2023
36
0
49
Bonjour à tous,

Je dois écrire un applescript qui traitera des images contenues dans un dossier unique. Le script sera lancé par action de dossier via automator.

Ces images représentent des produits sur fond blanc 255.
Toutes les images sont nommées comme suit : product.Ref-produit.position.jpg
  • Ref-produit est toujours codé sur 18 caractères
  • position va de 1 à 9
  • les images sont toujours du .jpg
  • exemple : product.DIOUUCSAPINZZZZZ00.1.jpg

Les actions attendues :
1/ pour toutes les images du dossier :
2/ pour chaque fichier image de position "1" dans le dossier :
  • vérifier si la largeur = 3500 pxl (c'est normalement la cas). Si ce n'est pas le cas, agrandir / réduire homothétiquement jusqu'à 3500 pxl de large
  • lire la hauteur de l'image en pixels et stocker dans une variable Href1
  • pour toute image du dossier répondant à ces critères :
    • les 19 premiers caractères du nom du fichier sont les mêmes que ceux de la vues "1" actuelle
    • les positions sont 3 ou 4
  • Alors :
    • vérifier que la largeur de l'image courante est 3500 pixels (c'est normalement la cas). Si ce n'est pas le cas, agrandir : réduire homothétiquement jusqu'à 3500 pxl de large
    • Agrandir / rétrécir homothétiquement l'image jusqu'à atteindre la hauteur Href1 avec comme hauteur maximale 4850 pxl. Si l'image dépasse 4850 il faut la déplacer dans un sous-dossier Result_KO (dossier à créer). Attention l'agrandissement doit se faire "vers le haut" ou le rétrècissement "depuis le haut" afin de conserver le positionnement du produit (marge inférieur = 150 pxl)
    • Recouper l'image à 3500 pixels de large OU ajouter des bandes blanches de part et d'autres pour avoir 3500 pxl de large. C'est là la partie complexe du script car en cas de recadrage il ne faut pas couper dans le produit. Dans ce cas déplacer l'image dans le sous-dossier Result_KO
    • Si les étapes précédents se sont bien passées, sauvegarder la nouvelle image dans un dossier Result_OK
J'ai photoshop installé sur ma machine, donc il est possible d'appeler un script action photoshop avec la réserve qu'à chaque changement de version je devrais updater le code.

Je mets en PJ trois images exemple.


Merci pour votre aide.
 

Fichiers joints

  • product.CEL3JB95REDZZZZZ00.3.jpg
    product.CEL3JB95REDZZZZZ00.3.jpg
    42,4 KB · Affichages: 3
  • product.CEL3JB95REDZZZZZ00.4.jpg
    product.CEL3JB95REDZZZZZ00.4.jpg
    61 KB · Affichages: 3
  • product.CEL3JB95REDZZZZZ00.1.jpg
    product.CEL3JB95REDZZZZZ00.1.jpg
    51,7 KB · Affichages: 2
Bonjour,

A la lecture de ta demande, je me pose des questions !

- Que devient l’image “1” après mise à L =3500 —> mettre dans dossier OK (même si image “3” ou “4” sont KO.
- Si après mise à L=3500 Href >4850 —>mettre dans KO et chercher quand même les ”3” et “4” et qu”en faire .

vérifier que la largeur de l'image courante est 3500 pixels (c'est normalement la cas). Si ce n'est pas le cas, agrandir : réduire homothétiquement jusqu'à 3500 pxl de large
Pourquoi , puisque après on la re-modifie à Href. —> mettre directement à Href puis vérifier si L >3500 KO si L < 3500 ajout bandes blanches. —> mettre dans OK

Après ces remarques, je pourrais essayer (sans certitude) d ' écrire un applescript.
 
Bonjour Zemtron54,

Merci de prendre du temps sur ce sujet.
mes réponses :
  • s'il faut modifier la vue .1 on l'enregistre et remplace l'ancienne. Elle devient la nouvelle référence en hauteur. On l'enregistre aussi dans le dossier OK
  • Si après la mise à 3500 on dépasse 4850 on déplace dans KO ainsi que les .3 et .4 correspondantes
  • en effet ma remarque est inutile vu qu'on va d'abord travailler la hauteur puis compléter / ajuster pour avoir 3500 de large

NB : j'avais envisagé d'utiliser photshop via un script action (la commande ROGNER permet d'isoler le produit de la vue .1 dans son pavé image blanc et donc de le mesurer pour ensuite isoler les produits des vues .3 et .4 pour les redimensionner. L(ajout ensuite des zones blanches à droite et à gauche est un jeu d'enfant avec la fonction zone de travail).
Mais qui dit photoshop dit gérer les diverses versions et charger au préalable les script actions nécessaires... chose que je en sais pas faire.

Merci d'avance pour votre aide
 
Bonjour,
un premier jet !

Pour la facilité et la vitesse , j’utilise “EXIFTOOL” il faut donc que tu l’ installes.

Pour installer exiftool que tu télécharges là: http://owl.phy.queensu.ca/~phil/exiftool/
Tu as un fichier nommé : ExifTool-12.63.dmg , tu double-clic sur ce fichier , cela ouvre une image disque dans laquelle tu vois un fichier nommé : ExifTool-12.63.pkg
Sur ce fichier tu fais un clic droit et tu choisis ouvrir une petite fenêtre de message s'ouvre avec les 2 boutons : ouvrir et annuler tu clic sur ouvrir sur les fenêtres qui suivent clic sur continuer, renseigne ton mot de passe session et l'appli s'installe.
Cette appli n'est pas visible dans le dossier applications... elle ajoute des fonctions aux commandes unix…


Je te met le script applescript.
pour l’utiliser:
Ouvrir Editeur de script qui se trouve dans Application—>Utilitaires
Clic sur le bouton “Nouveau document” en bas à gauche
Dans la fenêtre qui s’ouvre faire un copier coller du script.
Cliquer sur exécuter en haut à gauche



il te demande de choisir le dossier contenant les images, puis le dossier pour la réception des fichiers OK, puis le dossier pour la réception des fichiers KO.
Il crée un fichier provisoire “liste.txt” sur le bureau, contenant le chemin de tous les fichiers .jpg , puis il crée un dossier provisoire TMP pour la modification des fichiers.

Il met la largeur du fichier 1 à 3500, il vérifie si la hauteur est supérieure à 4850 si oui il copie le fichier dans le dossier KO et y met aussi les fichiers 3 et 4 (s’ils existent).
Si < 4850 alors il récupère la hauteur puis copie le fichier dans le dossier OK, puis traite les fichiers 3 et 4.

il met les fichier 3 et 4 à la hauteur, puis vérifie leur largeur. si largeur > 3500 il copie les fichiers dans KO sinon il met les fichiers à la largeur 3500 en ajoutant des bandes blanches de chaque cotés, puis les copies dans le dossier OK.

puis efface le fichier et le dossier provisoire et te met une boite de dialogue terminé.

Le script ne touche jamais aux fichiers originaux….

J’espère avoir bien compris le processus. Dans l’exemple des 3 fichiers que tu as mis dans ton premier message.
le fichier 1 fait 1000x535 —>mis à L=3500 —> H=1862 donc dossier OK
le fichier 3 fait 1000x486 —>mis à H=1862 —> L=3831 donc dossier KO
le fichier 4 fait 1000x543 —> mis à H=1862 —> L=3429 donc ajout bandes blanche à L=3500 et dossierOK

Dit moi si des modifications sont à apporter.
Si tout est ok je t' ajouterai quelques commentaires dans le script pour une meilleure compréhension.
Le script:
Bloc de code:
set ledossier to choose folder with prompt "Sélectionner le dossier contenant les images"
set ledossierunix to quoted form of POSIX path of ledossier as string
set ledossierOK to choose folder with prompt "Sélectionner le dossier pour les images OK"
set ledossierOK to quoted form of POSIX path of ledossierOK as string
set ledossierKO to choose folder with prompt "Sélectionner le dossier pour les images KO"
set ledossierKO to quoted form of POSIX path of ledossierKO as string

set bureau to POSIX path of (path to desktop folder as text)

set commande to "find " & ledossierunix & " -name '*.jpg' > " & bureau & "liste.txt"
do shell script commande

set monfichier to (path to desktop folder) as string
set monfichier to monfichier & "liste.txt" as alias

open for access monfichier
set lefichier to read monfichier
close access monfichier

set nb to count paragraph of lefichier
repeat with i from 1 to nb
   
    set laligne to paragraph i of lefichier
    if laligne is not "" then
        set AppleScript's text item delimiters to {"."}
        if text item 3 of laligne is "1" then
            set unfichier to (POSIX file laligne) as alias
            tell application "Finder"
                make new folder at (path to desktop folder) with properties {name:"tmp"}
                set AppleScript's text item delimiters to {}
                set nom to name of unfichier
            end tell
           
            set commande to "cp " & quoted form of laligne & " " & quoted form of (bureau & "tmp/" & nom)
            do shell script commande
            set le1 to quoted form of POSIX path of (bureau & "tmp/" & nom) as string
            set commande to "sips --resampleWidth 3500 " & le1
            do shell script commande
           
            set lahauteur to do shell script "/usr/local/bin/exiftool -imageHeight " & le1
            set AppleScript's text item delimiters to {":"}
            set Href to last text item of lahauteur as number
           
            if Href > 4850 then
                do shell script "mv " & le1 & " " & ledossierKO
                set AppleScript's text item delimiters to {"."}
                set cheminle3 to (text items 1 thru -3 of laligne) & "3.jpg" as string
                try
                    do shell script "cp " & quoted form of cheminle3 & " " & ledossierKO
                end try
                set cheminle4 to (text items 1 thru -3 of laligne) & "4.jpg" as string
                try
                    do shell script "cp " & quoted form of cheminle4 & " " & ledossierKO
                end try
               
               
            else
                do shell script "mv " & le1 & " " & ledossierOK
                set AppleScript's text item delimiters to {"."}
                set cheminle3 to (text items 1 thru -3 of laligne) & "3.jpg" as string
                set nomle3 to (text items 1 thru -3 of nom) & "3.jpg" as string
                try
                    set commande to "cp " & quoted form of cheminle3 & " " & quoted form of (bureau & "tmp/" & nomle3)
                    do shell script commande
                    set le3 to quoted form of POSIX path of (bureau & "tmp/" & nomle3) as string
                    set commande to "sips --resampleHeight " & Href & " " & le3
                    do shell script commande
                   
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & le3
                    set AppleScript's text item delimiters to {":"} -- defini le separateur
                    set lalargeur to last text item of lalargeur as number
                    if lalargeur > 3500 then
                        do shell script "mv " & le3 & " " & ledossierKO
                    else
                        set commande to "sips --padToHeightWidth " & Href & " " & "3500 --padColor FFFFFF " & le3
                        do shell script commande
                        do shell script "mv " & le3 & " " & ledossierOK
                    end if
                end try
               
                set AppleScript's text item delimiters to {"."}
                set cheminle4 to (text items 1 thru -3 of laligne) & "4.jpg" as string
                set nomle4 to (text items 1 thru -3 of nom) & "4.jpg" as string
                try
                    set commande to "cp " & quoted form of cheminle4 & " " & quoted form of (bureau & "tmp/" & nomle4)
                    do shell script commande
                    set le4 to quoted form of POSIX path of (bureau & "tmp/" & nomle4) as string
                    set commande to "sips --resampleHeight " & Href & " " & le4
                    do shell script commande
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & le4
                    set AppleScript's text item delimiters to {":"} -- defini le separateur
                    set lalargeur to last text item of lalargeur as number
                    if lalargeur > 3500 then
                        do shell script "mv " & le4 & " " & ledossierKO
                    else
                        set commande to "sips --padToHeightWidth " & Href & " " & "3500 --padColor FFFFFF " & le4
                        do shell script commande
                        do shell script "mv " & le4 & " " & ledossierOK
                    end if
                end try
               
            end if
            do shell script "rm -dr " & bureau & "tmp"
        end if
       
    end if
end repeat
do shell script "rm " & bureau & "liste.txt"
tell application "Finder"
    activate
    display dialog "terminé !"
end tell
 
Dernière édition:
Bonjour,
Merci pour ta rapidité et ce travail ! J'essaye de prendre le temps et le soin de regarder ça aujourd'hui pour te faire un premier retour

Bonne journée
 
Bonjour,

Je te remet le script, avec les commentaires, qui te permettront de comprendre ma démarche et éventuellement de modifier...
J'attends ton retour.

Bloc de code:
--initialise les chemins des dossiers
set ledossier to choose folder with prompt "Sélectionner le dossier contenant les images"
set ledossierunix to quoted form of POSIX path of ledossier as string
set ledossierOK to choose folder with prompt "Sélectionner le dossier pour les images OK"
set ledossierOK to quoted form of POSIX path of ledossierOK as string
set ledossierKO to choose folder with prompt "Sélectionner le dossier pour les images KO"
set ledossierKO to quoted form of POSIX path of ledossierKO as string

set bureau to POSIX path of (path to desktop folder as text)

--crée la liste des fichier JPG dans un fichier liste.txt
set commande to "find " & ledossierunix & " -name '*.jpg' > " & bureau & "liste.txt"
do shell script commande

-- met le chemin du fichier liste dans variable monfichier
set monfichier to (path to desktop folder) as string
set monfichier to monfichier & "liste.txt" as alias

-- met le contenu du fichier liste dans la variable lrfichier
open for access monfichier
set lefichier to read monfichier
close access monfichier

set nb to count paragraph of lefichier -- dans NB le nombre de lignes du fichier lefichier

--boucle sur les lignes
repeat with i from 1 to nb
    
    set laligne to paragraph i of lefichier -- recupère la lign (i)
    if laligne is not "" then --si ligne non vide
        
        set AppleScript's text item delimiters to {"."} --verifie si le text après le 2ieme point est "1"
        if text item 3 of laligne is "1" then
            set unfichier to (POSIX file laligne) as alias -- met le chemin du fichier au format mac
            tell application "Finder"
                make new folder at (path to desktop folder) with properties {name:"tmp"} --crée le dossier temp sur le bureau
                set AppleScript's text item delimiters to {}
                set nom to name of unfichier --recupère le nom du fcihier
            end tell
            
            set commande to "cp " & quoted form of laligne & " " & quoted form of (bureau & "tmp/" & nom) -- copie fichier 1 dans le dossier tmp
            do shell script commande
            set le1 to quoted form of POSIX path of (bureau & "tmp/" & nom) as string
            set commande to "sips --resampleWidth 3500 " & le1 -- met la largeur du fichier 1 à 3500
            do shell script commande
            
            set lahauteur to do shell script "/usr/local/bin/exiftool -imageHeight " & le1 --récupère la nouvelle valeur de la hauteur
            set AppleScript's text item delimiters to {":"}
            set Href to last text item of lahauteur as number
            
            if Href > 4850 then -- si hauteur >4850
                do shell script "mv " & le1 & " " & ledossierKO --déplace fichier 1 dans dossier KO
                set AppleScript's text item delimiters to {"."}
                set cheminle3 to (text items 1 thru -3 of laligne) & "3.jpg" as string -- construit chemin du fichier 3
                try
                    do shell script "cp " & quoted form of cheminle3 & " " & ledossierKO -- copie fichier 3 dans KO
                end try
                set cheminle4 to (text items 1 thru -3 of laligne) & "4.jpg" as string --construit chemin du fichier 4
                try
                    do shell script "cp " & quoted form of cheminle4 & " " & ledossierKO -- copie fichier 4 dans KO
                end try
                
                
            else -- si hauteur < 4850
                do shell script "mv " & le1 & " " & ledossierOK --déplace fichier 1 dans dossier OK
                set AppleScript's text item delimiters to {"."}
                set cheminle3 to (text items 1 thru -3 of laligne) & "3.jpg" as string -- construit chemin du fichier 3
                set nomle3 to (text items 1 thru -3 of nom) & "3.jpg" as string
                try
                    set commande to "cp " & quoted form of cheminle3 & " " & quoted form of (bureau & "tmp/" & nomle3) --copie fichier 3 dans dossier tmp
                    do shell script commande
                    set le3 to quoted form of POSIX path of (bureau & "tmp/" & nomle3) as string
                    set commande to "sips --resampleHeight " & Href & " " & le3 -- met hauteur du fichier 3  à Href
                    do shell script commande
                    
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & le3 -- recupère nouvelle largeur fichier 3
                    set AppleScript's text item delimiters to {":"} -- defini le separateur
                    set lalargeur to last text item of lalargeur as number
                    if lalargeur > 3500 then
                        do shell script "mv " & le3 & " " & ledossierKO -- si largeur > 3500 deplace le fichier 3 dans dossier KO
                    else --si largeur < 3500
                        set commande to "sips --padToHeightWidth " & Href & " " & "3500 --padColor FFFFFF " & le3 -- met largeur à 3500 avec bande blanche
                        do shell script commande
                        do shell script "mv " & le3 & " " & ledossierOK -- deplace fichier 3 dans dossier OK
                    end if
                end try
                
                set AppleScript's text item delimiters to {"."}
                set cheminle4 to (text items 1 thru -3 of laligne) & "4.jpg" as string -- construit chemin du fichier 4
                set nomle4 to (text items 1 thru -3 of nom) & "4.jpg" as string
                try
                    set commande to "cp " & quoted form of cheminle4 & " " & quoted form of (bureau & "tmp/" & nomle4) --copie fichier 4 dans dossier tmp
                    do shell script commande
                    set le4 to quoted form of POSIX path of (bureau & "tmp/" & nomle4) as string
                    set commande to "sips --resampleHeight " & Href & " " & le4 -- met hauteur du fichier 4  à Href
                    do shell script commande
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & le4 -- recupère nouvelle largeur fichier 4
                    set AppleScript's text item delimiters to {":"} -- defini le separateur
                    set lalargeur to last text item of lalargeur as number
                    if lalargeur > 3500 then
                        do shell script "mv " & le4 & " " & ledossierKO -- si largeur > 3500 deplace le fichier 4 dans dossier KO
                    else --si largeur < 3500
                        set commande to "sips --padToHeightWidth " & Href & " " & "3500 --padColor FFFFFF " & le4 -- met largeur à 3500 avec bande blanche
                        do shell script commande
                        do shell script "mv " & le4 & " " & ledossierOK -- deplace fichier 4 dans dossier OK
                    end if
                end try
                
            end if
            do shell script "rm -dr " & bureau & "tmp" -- efface dossier TMP
        end if
        
    end if
end repeat
do shell script "rm " & bureau & "liste.txt" -- efface fichier liste

tell application "Finder"
    activate
    display dialog "terminé !" giving up after 300 --se ferme après 5 minutes
end tell
 
Bonjour,

Merci cela fonctionne parfaitement !

Je vais modifier pour que les dossiers OK et KO se créent automatiquement.
Si je bloque là-dessus je vous sollicite.

Encore merci
 
Bonsoir,

Je pense que tu as pu réussir à ajouter la création des dossiers.
Sinon:
Il faut donc supprimer les 4 lignes de demande: (les lignes 3,4,5,6)
Bloc de code:
set ledossierOK to choose folder with prompt "Sélectionner le dossier pour les images OK"
set ledossierOK to quoted form of POSIX path of ledossierOK as string
set ledossierKO to choose folder with prompt "Sélectionner le dossier pour les images KO"
set ledossierKO to quoted form of POSIX path of ledossierKO as string

Puis juste après la ligne suivante qui initialise la variable bureau avec le chemin de ton bureau:
Bloc de code:
set bureau to POSIX path of (path to desktop folder as text)

tu insères ces lignes, En modifiant le nom par un nom à ta convenance j'ai mis "Fichiers OK" et "Fichiers KO" sur chacune des 4 lignes... Ceci pour créer les 2 dossiers sur le bureau, si un autre emplacement, à préciser...
Bloc de code:
tell application "Finder"
    make new folder at (path to desktop folder) with properties {name:"Fichiers OK"} --crée le dossier fichier OK sur le bureau
    set ledossierOK to quoted form of POSIX path of (bureau & "Fichiers OK/")
    make new folder at (path to desktop folder) with properties {name:"Fichiers KO"} --crée le dossier Fichier KO sur le bureau
    set ledossierKO to quoted form of POSIX path of (bureau & "Fichiers KO/")
end tell
 
Dernière édition:
Merci Zeltron !!
je galérais car il me manquait le POSIX path of....


Si tu es chaud je vais poster une autre demande sur le forum avec toujours du travail sur des images à redimensionner et incruster dans une autre image
 
@Zeltron
petit bug ! si les dossiers OK et KO existent déjà sur le bureau le script bloque.
Idéalement il faudrait que ces dossiers se créent en sous_dossier du dossier image

J'ai essayé en récupérant le chemin du dossier image pour remplacer le chemin vers le bureau mais j'ai un message me disant que mon chemin n'est pas de type constant

j'ai essayé avec un POSIX avant... pas mieux

peux-tu regarder ?
 
petit bug ! si les dossiers OK et KO existent déjà sur le bureau le script bloque.
Ce n'est pas un bug !
Il n'est pas possible d'avoir 2 éléments avec le même nom au même endroit ....

Créer ces dossiers dans un autre emplacement ne résoudra pas ce problème !
Soit on contrôle si le dossier existe et on ne le crée pas, soit on lui donne un autre nom .

Pour le créer dans le "dossier images", Tu parles du dossier qui est dans ton dossier utilisateur, à confirmer, ou un autre dossier ?..
 
Dernière édition:
"Pour le créer dans le "dossier images", Tu parles du dossier qui est dans ton dossier utilisateur, à confirmer, ou un autre dossier ?.."
non il s'agit du dossier où se trouvent les images que nous traitons.
En effet mon appellation est confusante avec le dossier "images" du mac
 
OK ! mais il faudra que les dossiers n'existent pas sinon erreur...
Donc pour créer les 2 dossiers dans le dossier que tu as sélectionné au début,
Le début du script devient:

Bloc de code:
set ledossier to choose folder with prompt "Sélectionner le dossier contenant les images"
set ledossierunix to quoted form of POSIX path of ledossier as string

set bureau to POSIX path of (path to desktop folder as text)
set chemin to ledossier as string

tell application "Finder"
    make new folder at chemin with properties {name:"Fichiers OK"} --crée le dossier fichier OK sur le bureau
    set ledossierOK to quoted form of POSIX path of (ledossierunix & "Fichiers OK/")
    make new folder at chemin with properties {name:"Fichiers KO"} --crée le dossier Fichier KO sur le bureau
    set ledossierKO to quoted form of POSIX path of (ledossierunix & "Fichiers KO/")
end tell

--crée la liste des fichier JPG dans un fichier liste.txt
 
Oups !
Un bug j'ai oublié de changer le chemin !
voila le bon:
Bloc de code:
--initialise les chemins des dossiers
set ledossier to choose folder with prompt "Sélectionner le dossier contenant les images"
set ledossierunix to quoted form of POSIX path of ledossier as string

set bureau to POSIX path of (path to desktop folder as text)
set chemin to ledossier as string

tell application "Finder"
    make new folder at chemin with properties {name:"Fichiers OK"} --crée le dossier fichier OK sur le bureau
    set ledossierOK to quoted form of POSIX path of (chemin & "Fichiers OK")
    make new folder at chemin with properties {name:"Fichiers KO"} --crée le dossier Fichier KO sur le bureau
    set ledossierKO to quoted form of POSIX path of (chemin & "Fichiers KO")
end tell

--crée la liste des fichier JPG dans un fichier liste.txt
 
super !
Du coup j'essaye de faire une V2 que je lancerai via automator en Action Rapide
Clic droit sur un dossier > action rapide traiter_vues_3-4 et ça lance ce script.
Du coup dans le code je dois récupérer le nom et chemin du dossier selectionné.

J'ai cherché des commandes comme "current folder " "selected folder" mais je ne trouve pas.

Quelles sont-elles ?

merci
 
Pour créer une action rapide:
Ouvrir automator,
sélectionner "action rapide"
dans la fenêtre sélectionner "le processus reçoit l'élément actuel" -->dossier
Insérer une action "exécuter un script Applescript"
Dans la fenêtre faire un copier-coller du script ci-dessous qui annule et remplace tout ce qui ci trouve. Bien sur, dans le script tu modifies les noms des dossiers créé par tes noms.
Tu enregistres avec le nom que tu veux "traiter_vues_3-4" par exemple
Cela devrait être bon.

Pour info: cela s'enregistre dans ta petite maison-->Bibliothèque-->Services.
A ne pas oublier, car on n'a pas fait la vérification, qu'il ne doit pas y avoir de dossiers existants dans ton dossier, ainsi que pas de dossier "tmp" ni de fichier "liste.txt" sur le bureau. sinon erreur !


Capture d’écran 2023-06-30 à 17.52.16.png

Bloc de code:
on run {input, parameters}
   
    --initialise les chemins des dossiers
set ledossier to input
set ledossierunix to quoted form of POSIX path of ledossier as string

set bureau to POSIX path of (path to desktop folder as text)
set chemin to ledossier as string

tell application "Finder"
    make new folder at chemin with properties {name:"Fichiers OK"} --crée le dossier fichier OK sur le bureau
    set ledossierOK to quoted form of POSIX path of (chemin & "Fichiers OK")
    make new folder at chemin with properties {name:"Fichiers KO"} --crée le dossier Fichier KO sur le bureau
    set ledossierKO to quoted form of POSIX path of (chemin & "Fichiers KO")
end tell

--crée la liste des fichier JPG dans un fichier liste.txt
set commande to "find " & ledossierunix & " -name '*.jpg' > " & bureau & "liste.txt"
do shell script commande

-- met le chemin du fichier liste dans variable monfichier
set monfichier to (path to desktop folder) as string
set monfichier to monfichier & "liste.txt" as alias

-- met le contenu du fichier liste dans la variable lrfichier
open for access monfichier
set lefichier to read monfichier
close access monfichier

set nb to count paragraph of lefichier -- dans NB le nombre de lignes du fichier lefichier

--boucle sur les lignes
repeat with i from 1 to nb
   
    set laligne to paragraph i of lefichier -- recupère la lign (i)
    if laligne is not "" then --si ligne non vide
       
        set AppleScript's text item delimiters to {"."} --verifie si le text après le 2ieme point est "1"
        if text item 3 of laligne is "1" then
            set unfichier to (POSIX file laligne) as alias -- met le chemin du fichier au format mac
            tell application "Finder"
                make new folder at (path to desktop folder) with properties {name:"tmp"} --crée le dossier temp sur le bureau
                set AppleScript's text item delimiters to {}
                set nom to name of unfichier --recupère le nom du fcihier
            end tell
           
            set commande to "cp " & quoted form of laligne & " " & quoted form of (bureau & "tmp/" & nom) -- copie fichier 1 dans le dossier tmp
            do shell script commande
            set le1 to quoted form of POSIX path of (bureau & "tmp/" & nom) as string
            set commande to "sips --resampleWidth 3500 " & le1 -- met la largeur du fichier 1 à 3500
            do shell script commande
           
            set lahauteur to do shell script "/usr/local/bin/exiftool -imageHeight " & le1 --récupère la nouvelle valeur de la hauteur
            set AppleScript's text item delimiters to {":"}
            set Href to last text item of lahauteur as number
           
            if Href > 4850 then -- si hauteur >4850
                do shell script "mv " & le1 & " " & ledossierKO --déplace fichier 1 dans dossier KO
                set AppleScript's text item delimiters to {"."}
                set cheminle3 to (text items 1 thru -3 of laligne) & "3.jpg" as string -- construit chemin du fichier 3
                try
                    do shell script "cp " & quoted form of cheminle3 & " " & ledossierKO -- copie fichier 3 dans KO
                end try
                set cheminle4 to (text items 1 thru -3 of laligne) & "4.jpg" as string --construit chemin du fichier 4
                try
                    do shell script "cp " & quoted form of cheminle4 & " " & ledossierKO -- copie fichier 4 dans KO
                end try
               
               
            else -- si hauteur < 4850
                do shell script "mv " & le1 & " " & ledossierOK --déplace fichier 1 dans dossier OK
                set AppleScript's text item delimiters to {"."}
                set cheminle3 to (text items 1 thru -3 of laligne) & "3.jpg" as string -- construit chemin du fichier 3
                set nomle3 to (text items 1 thru -3 of nom) & "3.jpg" as string
                try
                    set commande to "cp " & quoted form of cheminle3 & " " & quoted form of (bureau & "tmp/" & nomle3) --copie fichier 3 dans dossier tmp
                    do shell script commande
                    set le3 to quoted form of POSIX path of (bureau & "tmp/" & nomle3) as string
                    set commande to "sips --resampleHeight " & Href & " " & le3 -- met hauteur du fichier 3  à Href
                    do shell script commande
                   
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & le3 -- recupère nouvelle largeur fichier 3
                    set AppleScript's text item delimiters to {":"} -- defini le separateur
                    set lalargeur to last text item of lalargeur as number
                    if lalargeur > 3500 then
                        do shell script "mv " & le3 & " " & ledossierKO -- si largeur > 3500 deplace le fichier 3 dans dossier KO
                    else --si largeur < 3500
                        set commande to "sips --padToHeightWidth " & Href & " " & "3500 --padColor FFFFFF " & le3 -- met largeur à 3500 avec bande blanche
                        do shell script commande
                        do shell script "mv " & le3 & " " & ledossierOK -- deplace fichier 3 dans dossier OK
                    end if
                end try
               
                set AppleScript's text item delimiters to {"."}
                set cheminle4 to (text items 1 thru -3 of laligne) & "4.jpg" as string -- construit chemin du fichier 4
                set nomle4 to (text items 1 thru -3 of nom) & "4.jpg" as string
                try
                    set commande to "cp " & quoted form of cheminle4 & " " & quoted form of (bureau & "tmp/" & nomle4) --copie fichier 4 dans dossier tmp
                    do shell script commande
                    set le4 to quoted form of POSIX path of (bureau & "tmp/" & nomle4) as string
                    set commande to "sips --resampleHeight " & Href & " " & le4 -- met hauteur du fichier 4  à Href
                    do shell script commande
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & le4 -- recupère nouvelle largeur fichier 4
                    set AppleScript's text item delimiters to {":"} -- defini le separateur
                    set lalargeur to last text item of lalargeur as number
                    if lalargeur > 3500 then
                        do shell script "mv " & le4 & " " & ledossierKO -- si largeur > 3500 deplace le fichier 4 dans dossier KO
                    else --si largeur < 3500
                        set commande to "sips --padToHeightWidth " & Href & " " & "3500 --padColor FFFFFF " & le4 -- met largeur à 3500 avec bande blanche
                        do shell script commande
                        do shell script "mv " & le4 & " " & ledossierOK -- deplace fichier 4 dans dossier OK
                    end if
                end try
               
            end if
            do shell script "rm -dr " & bureau & "tmp" -- efface dossier TMP
        end if
       
    end if
end repeat
do shell script "rm " & bureau & "liste.txt" -- efface fichier liste

tell application "Finder"
    activate
    display dialog "terminé !" giving up after 300 --se ferme après 5 minutes
end tell

    return input
end run
 
Hello !

Alors j'avais fait plus ou moins comme ça mais je n'avais pas bien déclaré mon input, donc rien ne se passait

Mais j'ai une erreur de synthaxe :

Impossible de convertir quoted form of POSIX path en type string.

... sur la ligne

set ledossierunix to quoted form of POSIX path of ledossier as string

peut-être parce que quand on lance via automator la variable input n'a pas de chemin ?

merci pour ton aide en tout cas
 
Je viens de retester chez moi ! je n'ai pas de problème tout fonctionne ! j'ai fait un copier-coller du script que j'ai mis ci-dessus .

J'y pense, tu n'aurais pas des caractères spéciaux dans la nom de ton dossier, genre lettres accentuées ou ponctuation style point ou slash ?
 
  • J’aime
Réactions: Vinzzz25