Incrustation d'images redimensionnées dans une autre image - via apple script

Bravo Messieurs !

c'est ce que nous venons de trouver avec un pote au service IT de ma boite

et ça marche !!

dans mon script j'ai dû remplacer

set commande to "/usr/local/bin/php " & lefichierphp & " " & chemin19 & " " & cheminral & " " & chemincb & " " & laposition & " " & letempo & " " & leretour




Par contre le placement des images RAL et CB n'est pas parfait. ils ne sont pas exactement à 150 pxl du bas de l'image .19.
voici quelques exemples.

Je ne vois pas l'erreur dans le php

Pour rendre le script "intelligent" il faudrait idéalement qu'il détecte le dernier pixel non blanc vers le bas de l'image et le prenne comme position de référence pour aligner les images en bas .
Voici mes fichiers de travail pour ces exemples :


merci
 

Fichiers joints

  • product.BURF8G5WBRWZZZZZ00.19.jpg
    product.BURF8G5WBRWZZZZZ00.19.jpg
    56,6 KB · Affichages: 4
  • product.LOEJ6KGXBEIZZZZZ00.19.jpg
    product.LOEJ6KGXBEIZZZZZ00.19.jpg
    52,7 KB · Affichages: 2
  • product.LOEJ6KGXPINZZZZZ00.19.jpg
    product.LOEJ6KGXPINZZZZZ00.19.jpg
    46,2 KB · Affichages: 5
Bon déjà cela fonctionne !
je vais maintenant regarder pour mettre toutes les valeurs de calcul et de positionnement en variables, en tête du script., et je te posterais la nouvelle version du script et du php...


Pour le positionnement, il est bien à 150 pixels du bas de l'image.
MAIS tes images de référence ont des marges basses en transparent d'une trentaine de pixels....
Donc reprends tes images RAL et CB et supprimes avec un recadrage pour que le bas de l'image soit bien en bas...
 
Je te remets le script applescript et le scriptPHP.

Donc en début de l'applescript il est initialisé toutes les variables.
Si changement seule ces 8 lignes seront à modifier, il n'y aura pas besoin de modifier, ni le restant du applescript ni le php.
tiens moi au courant !...

Bloc de code:
-- initiation des variables
set limite_petit to 13 -- pour redimensionner les images soit < 13 sinon...
set calcul_x_petit to 10650 --pour calcul largeur redimension pour < 13
set calcul_y_petit to 12070 --pour calcul hauteur redimension pour < 13
set calcul_x_grand to 16745 --pour calcul largeur redimension pour > 12,99
set calcul_y_grand to 14775 --pour calcul hauteur redimension pour > 12,99
set position_x_petit to 1040 --valeur position à partir des bords pour < 13
set position_x_grand to 765 --valeur position à partir des bords pour > 12,99
set position_y_bas to 150 --valeur position à partir du bords bas pour < 13

tell application "Finder"
    
    set ledossier to choose folder with prompt "Sélectionner le dossier contenant les images à traiter"
    set ledossierunix to POSIX path of ledossier as string
    set lecsv to choose file with prompt "Sélectionner le fichier dimensions CSV " -- texte avec saut de lignes
    set bureau to POSIX path of (path to desktop folder as text)
    set leRAL to quoted form of bureau & "SOURCES_IMAGES_REF/ral.png" as string
    set leCB to quoted form of bureau & "SOURCES_IMAGES_REF/CB.png" as string
    set lefichierphp to bureau & "SOURCES_IMAGES_REF/superpose_image.php" as string
    
    set tous to every file of entire contents of ledossier
    set nb to count tous
    
    repeat with i from 1 to nb
        set unfichier to item i of tous
        
        --obtenir le chemin du fichier
        set lechemin to unfichier as string
        set lechemin to quoted form of POSIX path of lechemin as string
        
        --obtenir le nom complet avec extension
        set nom to name of unfichier
        
        --obtenir le nom sans extension
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
        set elements to text items of (name of unfichier as string) --nom --ou of (name of a as string)
        set nomcourt to (items 1 thru -2 of elements) as string
        
        --vérifi si fichier "1"
        if last item of nomcourt is "1" then
            set nomcsv to text item 2 of nomcourt --recup la deuxième partie du nomcourt
            set commande to "grep '" & nomcsv & "' " & (quoted form of POSIX path of lecsv) --  récup la ligne dans fichier texte   
            set lataille to do shell script commande
            set AppleScript's text item delimiters to {";"}
            set taille to text item 2 of lataille -- recupère le taille du fichier
            set taille to taille as number
            
            -- crer le dossier tmp sur le bureau
            tell application "Finder"
                make new folder at (path to desktop folder) with properties {name:"tmp"}
                set AppleScript's text item delimiters to {}
                set letmp to (POSIX path) of (bureau & "tmp")
            end tell
            
            set commande to "cp " & lechemin & " " & quoted form of (letmp & "/" & nom) -- copie fichier 1 dans le dossier tmp
            do shell script commande
            set chemin19 to quoted form of (letmp & "/" & nom)
            set commande to "cp " & leRAL & " " & quoted form of (letmp & "/RAL.png") -- copie fichier RAL dans le dossier tmp
            do shell script commande
            set cheminral to quoted form of (letmp & "/RAL.png")
            set commande to "cp " & leCB & " " & quoted form of (letmp & "/CB.png") -- copie fichier CB dans le dossier tmp
            do shell script commande
            set chemincb to quoted form of (letmp & "/CB.png")
            --met fichier à 3500 et ral et cb au dimension
            set commande to "sips --resampleWidth 3500 " & quoted form of (letmp & "/" & nom) -- met la largeur du fichier 1 à 3500
            do shell script commande
            
            --met CB et RAL a la taille
            if taille < 13 then
                set largeurcb to calcul_y_petit / taille
                set hauteurral to calcul_x_petit / taille
                set laposition to position_x_petit
                set commande to "sips --resampleWidth " & largeurcb & " " & quoted form of (letmp & "/cb.png") -- met la largeur du fichier 1 à 3500
                do shell script commande
                set commande to "sips --resampleHeight " & hauteurral & " " & quoted form of (letmp & "/ral.png") -- met la largeur du fichier 1 à 3500
                do shell script commande
            else
                set largeurcb to calcul_x_grand / taille
                set hauteurral to calcul_y_grand / taille
                set laposition to position_x_grand
                set commande to "sips --resampleWidth " & largeurcb & " " & quoted form of (letmp & "/cb.png") -- met la largeur du fichier 1 à 3500
                do shell script commande
                set commande to "sips --resampleHeight " & hauteurral & " " & quoted form of (letmp & "/ral.png") -- met la largeur du fichier 1 à 3500
                do shell script commande
            end if
            
            --init variable pour le php
            set letempo to quoted form of (letmp & "/tmp.jpg")
            set leretour to quoted form of (letmp & "/result.jpg")
            
            set commande to "/usr/local/bin/php " & lefichierphp & " " & chemin19 & " " & cheminral & " " & chemincb & " " & laposition & " " & letempo & " " & position_y_bas & " " & leretour
            do shell script commande
            
            set nouveau to quoted form of (ledossierunix & nomcourt & "9.jpg")
            do shell script "mv " & leretour & " " & nouveau -- deplace fichier19 dans dossier OK
            do shell script "rm -dr " & bureau & "tmp" -- efface dossier TMP
        end if
        
    end repeat
end tell
tell application "Finder"
    activate
    display dialog "terminé !" giving up after 300 --se ferme après 5 minutes
end tell

le php

Bloc de code:
#!/usr/bin/php -f

 <?php

$chemin=$argv[1];
$cheminral=$argv[2];
$chemincb=$argv[3];
$laposition=$argv[4];
$letmp=$argv[5];
$positionbas=$argv[6];
$leretour=$argv[7];

// On charge d'abord les images
$source = imagecreatefrompng($cheminral); // Le logo est la source
$destination = imagecreatefromjpeg($chemin); // La photo est la destination
 
// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
 
// On veut placer le logo en bas à droite, on calcule les coordonnées où on doit placer le logo sur la photo
$destination_x = $laposition-($largeur_source/2); //$largeur_destination - $largeur_source;
$destination_y = $hauteur_destination - ($hauteur_source + $positionbas);
 
// On met le logo (source) dans l'image de destination (la photo)
imagecopy($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source);
 
// On affiche l'image de destination qui a été fusionnée avec le logo RAL
imagejpeg($destination, $letmp);


$source = imagecreatefrompng($chemincb);
$destination = imagecreatefromjpeg($letmp);

$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

$destination_x = $largeur_destination - ($largeur_source/2 + $laposition);
$destination_y = $hauteur_destination - ($hauteur_source + $positionbas);

imagecopy($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source);

imagejpeg($destination, $leretour);

?>
 
Essai avec ces images références.
 

Fichiers joints

  • CB.png
    CB.png
    351,4 KB · Affichages: 3
  • RAL.png
    RAL.png
    137,7 KB · Affichages: 3
Bonjour,

Parfait ! tout fonctionne.
Je vais maintenant le basculer en action de dossier via automator pour lancer en clic droit depuis le dossier contenant les images à traiter.

Pour ce faire je change le début en :

set le dossier to input

ensuite il y a une modif sur le chemin à faire non ?
 
Bonjour,

Pour le basculer en action de dossier, il faut:
en début de script (avant la ligne "tell application "finder")
ajouter la ligne :
Bloc de code:
set ledossier to input as alias

puis supprimer la ligne de demande de dossier:
Bloc de code:
set ledossier to choose folder with prompt "Sélectionner le dossier contenant les images à traiter"

dans le processus choisir "reçoit l'élément actuel"->dossiers " dans" -->finder

Normalement cela devrait suffire, si problème fait moi signe.
 
Dernière édition:
Bonjour,

J'ai une erreur qui apparaît

L’action « Exécuter un script AppleScript » a rencontré une erreur : « Erreur dans Finder : PHP Warning: Undefined array key 7 in /Users/philippeestran/Desktop/SOURCES_IMAGES_REF/superpose_image.php on line 11

PHP Fatal error: Uncaught TypeError: Unsupported operand types: int + string in /Users/philippeestran/Desktop/SOURCES_IMAGES_REF/superpose_image.php:25

Stack trace:

#0 {main}

thrown in /Users/philippeestran/Desktop/SOURCES_IMAGES_REF/superpose_image.php on line 25 »


.... to be continued ;)
 
Le message dit qu'il n'y a pas de paramètre indexé 7.

Dans ta ligne d'appel dans l'applescript tu as bien les 7 paramètres .
Bloc de code:
set commande to "/usr/local/bin/php " & lefichierphp & " " & chemin19 & " " & cheminral & " " & chemincb & " " & laposition & " " & letempo & " " & position_y_bas & " " & leretour
chemin19
cheminral
chemincb
laposition
letempo
position_y_bas
leretour

Edit: tu es sur d'avoir pris le dernière version ?
 
Dernière édition:
Hello !

ça fonctionne.
J'avais supprimé un chemin en fait.
A l'utililisation je vois que je mets systématiquement le fichier dimensions.csv dans le répertoire contenant les images à traiter, du coup peux-tu mettre en dur son chemin ? cela évite un dialogbox

merci
 
OK !
pas de problème tu remplaces la ligne:

Bloc de code:
set lecsv to choose file with prompt "Sélectionner le fichier dimensions CSV " -- texte avec saut de lignes
par la ligne:
Bloc de code:
set lecsv to ((ledossier as string) & "dimensions.csv") as alias