Photo Bordure image sur Mac M1 ?

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Bonsoir,

Bon j'ai trouvé la raison, mais la seule solution que j'ai trouvé passe par un "Image Events"

Je te le mets, pour essai voir si la commande passe sur ton OS !
J'attends ton retour !
Si la commande ne passe pas , il restera une solution avec exiftool (un utilitaire qu'il faudra installer)

Bloc de code:
on adding folder items to Mon_Dossier after receiving Liste_Fichiers
   
    tell application "Finder"
       
        set Fimage to {"jpg", "jpeg", "png", "tiff", "gif", "bmp", "psd"} -- liste des extensions a traiter dans Fimage avec fonction mdls
       
        -- traitement des fichiers :
        set les_fichiers to files of Mon_Dossier --récupère tous les fichiers du dossier
        repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set lefichier to chaque_fichier as string --récupère le chemin du fichier au format chaine de caractères
               
               
                if lextension is in Fimage then -- si fichier video de la liste Fimage
                    set lechemin to POSIX path of lefichier
                   
                    tell application "Image Events"
                        set myImage to open (file lefichier)
                        set dims to (dimensions of myImage)
                        close
                    end tell
                    set lalargeur to (item 1 of dims) as string
                    set lahauteur to (item 2 of dims) as string
                   
                    set largeur to lalargeur as number
                    set hauteur to lahauteur as number
                   
                    set cadre to largeur * 0.007
                    set Lcadre to (largeur + cadre) as string
                    set Vcadre to (hauteur + cadre) as string
                    set lacommande to "sips -p " & Vcadre & " " & Lcadre & " -s format jpeg -s formatOptions 85 --padColor FF0000 -i " & quoted form of lechemin
                   
                    do shell script lacommande
                   
                end if
               
            end tell
        end repeat -- fichier suivant
    end tell
end adding folder items to
 
Dernière édition:

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
Cela semble fonctionner... j'ai même mis 100 au lieu de 85 pour ne pas avoir de perte coté poids fichier.
J'ai testé avec du carré, hauteur, largeur... hauteur en 16:9...
Merci beaucoup. :)
 

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Donc tu confirmes que la commande "image Events" fonctionne !

Super
J'avais mis la bordure en rouge pour plus de visibilité du résultat sur les photos je suppose que tu l'a remis en noir .

Je pense que tu as du comprendre toute la teneur du script, donc si problème tu sauras faire ?
Si problème n'hésite pas à demander
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
Oui j'ai pigé pour la couleur le pourcentage et certains termes qui sont clairs. Grand merci. :up: :)

Je me demande pourquoi la dernière fois la commande image event ne marchait pas correctement.
 
Dernière édition:

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
"Image Events" est une application fournie avec le système elle se situe dans système:bibliothèque:coreService

En fonction de ce que l'on lui demande, elle à besoin d'accéder à différents endroit du système, et avec les sécurité mise sur les nouveau système par apple c'est plus ou moins difficile.

Bref pour récupérer les dimensions stockées dans l'image cela fonctionne.
Pour info : avec le script précédent je récupérais les dimensions de l'image affiché par le finder donc en tenant compte de la rotation éventuelle. J'obtenais donc la largeur au lieu de la hauteur si la rotation était renseignée dans les données de l'image.

Content pour toi ! :up: :coucou:
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
J'ai testé un truc et j'ai constaté que si je repasse une image traitée dans le script son effet s'annule. Je l'ai constaté en faisant ceci
Image A --> Bordure noire Image An --> Bordure blanche Image Ab --> Bordure noire Image An.

Et je réalise autre chose... il y a toujours un "couac"... la bordure est différente si l'image est verticale ou horizontale. J'ai pris la même image de départ, dupliquée et j'en ai tournée une... et je constate ceci: de gauche à droite originale, bordure sens vertical et bordure sens horizontal. Je chipote cette mais ur une marge plus conséquente cela se voit énormément. c'est encore sur la verticale que le pourcentage n'est pas bon (*0,07 pour rappel)

Capture d’écran 2022-08-25 à 21.28.20.png


Mais je vais me contenter de cela je peux faire des actions différentes selon l'image. J'ai conté le problème en modifiant les images sur mon flickr https://www.flickr.com/photos/11086148@N05/
 

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Pour les différence d'épaisseur de bordure je peux rectifié, je vais voir...
Pour le fait de passer 2 fois, je vais regarder ....
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
En fait "image events" nous refait bien le même problème que l'on avait constaté sur les verticales en début de fil, il y a la moitié de la valeur définie.
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
je crois avoir compris ou ça coince ...
sur une horizontale le chef de 0,07 se fait sur les 5360 (qui est bien la longueur max))
sur une verticale le chef de 0,07 se fait sur les 3573 ( qui est la longueur mini). peut être que le terme largeur est toujours la base d'un fichier et que les terme longueur est différent de largeur... je vois si le script marche en remplaças largeur par longueur.
 

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Non rien à voir, il met 0,007% de la valeur renseigné pour largeur qui peut en fait être la hauteur.

Un nouveau script qui met un cadre toujours égal à 0,007% de la plus grande dimension de l'image, A vérifié en regardant le nombre de pixels, car en fonction de l'affichage cela peut paraître différent.

pour l'autre problème je cherche ...

Bloc de code:
on adding folder items to Mon_Dossier after receiving Liste_Fichiers
    
    tell application "Finder"
        
        set Fimage to {"jpg", "jpeg", "png", "tiff", "gif", "bmp", "psd"} -- liste des extensions a traiter dans Fimage avec fonction mdls
        
        -- traitement des fichiers :
        set les_fichiers to files of Mon_Dossier --récupère tous les fichiers du dossier
        repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set lefichier to chaque_fichier as string --récupère le chemin du fichier au format chaine de caractères
                
                
                if lextension is in Fimage then -- si fichier video de la liste Fimage
                    set lechemin to POSIX path of lefichier
                    
                    tell application "Image Events"
                        set myImage to open (file lefichier)
                        set dims to (dimensions of myImage)
                        close
                    end tell
                    set lalargeur to (item 1 of dims) as string
                    set lahauteur to (item 2 of dims) as string
                    
                    set largeur to lalargeur as number
                    set hauteur to lahauteur as number
                    
                    if largeur > hauteur then
                        set cadre to largeur * 0.007
                    else
                        set cadre to hauteur * 0.007
                    end if
                    
                    set Lcadre to (largeur + cadre) as string
                    set Vcadre to (hauteur + cadre) as string
                    set lacommande to "sips -p " & Vcadre & " " & Lcadre & "  -s formatOptions 100 --padColor 000000 -i " & quoted form of lechemin
                    
                    do shell script lacommande
                    
                end if
                
            end tell
        end repeat -- fichier suivant
    end tell
end adding folder items to
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
j'ai remplacé dan le script largeur par longueur et cela semble fonctionner ... (4000x6000) et 0.125 au lieu de 0.007 pour mieux y voir

Capture d’écran 2022-08-25 à 22.08.02.png


Je vais toutefois tester ton script. :)
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
Non j'ai rein dis errer de ma part une rotation du fichier dans aperçu ne change pas les chose il faut que mon image soit vraiment une horizontale ou une verticale... donc ma théorie semble fausse... :banghead:
 

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Je reprendrai tout çà demain à tête reposés LOL
Pour ce soir STOP... :banghead:
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
Bon tron script semble OK à présent sur une verticale ou une horizontale pas de différence en nombre de pixel sur la bordure.
 

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Bonjour,
Le problème pour le passage du fichier une deuxième fois provient de “Image Events” en effet lorsque le logiciel récupère lea dimension de la photo avant son traitement, il obtient les dimensions d’origine de la photo, donc sans les dimensions incluant le cadre. Le 2ième traitement se fait donc avec les mauvaises dimensions.

Pour palier à ce problème, j’utilise “EXIFTOOL”.

Pour installer exiftool que du télécharges là: http://owl.phy.queensu.ca/~phil/exiftool/
Tu as un fichier nommé : ExifTool-12.44.dmg , tu double-clic sur ce fichier , cela ouvre une image disque dans laquelle tu vois un fichier nommé : ExifTool-12.44.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...

Grace à cela, à chaque fois que tu mets une photo dans le dossier, une nouvelle bordure égale à 0,007x la plus grande dimension de l’image est ajouté à la photo.

Je te met le nouveau script.

Bloc de code:
on adding folder items to Mon_Dossier after receiving Liste_Fichiers
    
    tell application "Finder"
        
        set Fimage to {"jpg", "jpeg", "png", "tiff", "gif", "bmp", "psd"} -- liste des extensions a traiter dans Fimage avec fonction mdls
        
        -- traitement des fichiers :
        set les_fichiers to files of Mon_Dossier --récupère tous les fichiers du dossier
        repeat with chaque_fichier in les_fichiers -- répète avec chaque fichier du dossier en cour
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set lefichier to chaque_fichier as string --récupère le chemin du fichier au format chaine de caractères
                
                
                if lextension is in Fimage then -- si fichier video de la liste Fimage
                    set lechemin to POSIX path of lefichier
                    
                    set lahauteur to do shell script "/usr/local/bin/exiftool -imageHeight " & quoted form of POSIX path of lefichier
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & quoted form of POSIX path of lefichier
                    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
                    set AppleScript's text item delimiters to {": "}
                    set lalargeur to last text item of lalargeur
                    set lahauteur to last text item of lahauteur
                    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    
                    set largeur to lalargeur as number
                    set hauteur to lahauteur as number
                    
                    if largeur > hauteur then
                        set cadre to round (largeur * 0.007)
                    else
                        set cadre to round (hauteur * 0.007)
                    end if
                    
                    set Lcadre to (largeur + cadre) as string
                    set Vcadre to (hauteur + cadre) as string
                    set lacommande to "sips -p " & Vcadre & " " & Lcadre & "  -s formatOptions 100 --padColor 000000 -i " & quoted form of lechemin
                    
                    do shell script lacommande
                    
                end if
                
            end tell
        end repeat -- fichier suivant
    end tell
end adding folder items to
 

zeltron54

Membre expert
Club iGen
29 Mars 2008
2 919
480
Lorraine
Je viens de trouver un Bug dans le script.
Si tu déposes un premier fichier, il est traité correctement , si tu le laisses et que tu en déposes un deuxième, le deuxième est traité correctement mais le premier est traité une deuxième fois ...

voici la correction.

Bloc de code:
on adding folder items to Mon_Dossier after receiving Liste_Fichiers
    
    tell application "Finder"
        
        set Fimage to {"jpg", "jpeg", "png", "tiff", "gif", "bmp", "psd"} -- liste des extensions a traiter dans Fimage avec fonction mdls
        
        -- traitement des fichiers :
        repeat with chaque_fichier in Liste_Fichiers -- répète avec chaque fichier du dossier en cour
            -- traitement d'un fichier
            tell application "Finder"
                set nom to name of chaque_fichier --récupère le nom du fichier
                set AppleScript's text item delimiters to {"."} -- defini le separateur
                set lextension to get last text item of nom -- recupère l'extension
                set lefichier to chaque_fichier as string --récupère le chemin du fichier au format chaine de caractères
                
                
                if lextension is in Fimage then -- si fichier video de la liste Fimage
                    set lechemin to POSIX path of lefichier
                    
                    set lahauteur to do shell script "/usr/local/bin/exiftool -imageHeight " & quoted form of POSIX path of lefichier
                    set lalargeur to do shell script "/usr/local/bin/exiftool -imageWidth " & quoted form of POSIX path of lefichier
                    set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
                    set AppleScript's text item delimiters to {": "}
                    set lalargeur to last text item of lalargeur
                    set lahauteur to last text item of lahauteur
                    set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
                    
                    set largeur to lalargeur as number
                    set hauteur to lahauteur as number
                    
                    if largeur > hauteur then
                        set cadre to round (largeur * 0.007)
                    else
                        set cadre to round (hauteur * 0.007)
                    end if
                    
                    set Lcadre to (largeur + cadre) as string
                    set Vcadre to (hauteur + cadre) as string
                    set lacommande to "sips -p " & Vcadre & " " & Lcadre & "  -s formatOptions 100 --padColor 000000 -i " & quoted form of lechemin
                    
                    do shell script lacommande
                    
                end if
                
            end tell
        end repeat -- fichier suivant
    end tell
end adding folder items to
 

lepetitpiero

Membre expert
Club iGen
20 Août 2005
9 187
562
51
Bonsoir,

Que dire sinon Merci... :) Cela semble bien fonctionner comme tu le décrit... Il me va bien se script. Tu es génial. :)

1661288328150-png.265131