Je pense que la déformation vient du fait que vous n’avez pas adapté la conversion du logo à la largeur en pixels du panoramique de votre caméra, qui est variable d’une caméra à l’autre.
La GoPro me produit des images de 5760x2880, tandis que mon drone produit des images de 14400x7200.
Du coup, voici mes commandes (sous Windows) pour générer les logos à incruster (d’une hauteur fixe de 600px, et de largeur du panoramique) :
2880px (hauteur image GoPro) - 600px (hauteur logo) = 2280 px (position y du bord supérieur du logo)
Je lance l’ajout des logos sur toutes les images d’un dossier via ce script Python :
import subprocess
from pathlib import Path
#--- PARAMÈTRES ---
dossier_entree = Path(r"D:CHEMIN\PHOTOS") # Dossier contenant les images JPG
logo_path = Path(r"D:\CHEMIN\logo-nadir-5760.jpg") # Chemin du logo
dossier_sortie = Path(r"D:\CHEMIN\PHOTOSLOGOS") # Dossier de sortie
position_y = 2280 # position Y du logo
perso = "_avecLogo" # Personnalisation ajoutée au nom des images avec Logo
# Créer le dossier de sortie s'il n'existe pas
dossier_sortie.mkdir(exist_ok=True)
# Récupérer la liste des fichiers JPG à traiter
fichiers_jpg = list(dossier_entree.glob("*.jpg"))
nombre_total = len(fichiers_jpg)
# Traiter chaque fichier JPG du dossier d'entrée
for index, fichier in enumerate(fichiers_jpg, start=1):
fichier_sortie = dossier_sortie / f"{fichier.stem}{perso}{fichier.suffix}"
commande = [
"magick",
"composite",
str(logo_path),
str(fichier),
"-geometry", f"+0+{position_y}",
str(fichier_sortie)
]
subprocess.run(
commande,
creationflags=subprocess.CREATE_NO_WINDOW,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
print(f"Traité : {fichier.name} -> {fichier_sortie.name} ({index} sur {nombre_total})")
print("Terminé.")
Pour simplement ajouter un logo au nadir, les deux lignes de commande que j’avais indiqué dans le premier post sont quand même assez simples… la première à n’utiliser qu’une fois pour générer le logo, la seconde à appliquer à chaque photo (et aussi sans recompression).
J’ai complété avec l’explication sur les valeurs en pixels en fonction des dimensions de la photo en pixels.
2nde étape : Traiter un répertoire entier (dans l’exemple, le script et le nadir précédemment généré sont dans le même dossier)
dossier=/home/albert/Images/gopro/Caen/Photosdujour
# À Modifier avec votre dossier
mkdir ${dossier}_nadir/
shopt -s globstar;
fichiers=(${dossier}/*.JPG)
k=0
n=${#fichiers[@]}
a=$(date +%s%3N)
for f in "${fichiers[@]}";
do
jpegtran -copy all -optimize -progressive -trim -drop +0+2430 nadir-5760.jpg ${f} > ${dossier}_nadir/nadir-${k}.jpg
k=$((k+1))
b=$(date +%s%3N)
t=$(((b-a)/k*n/1000))
t0=$(((b-a)/1000))
ts=$((t%60))
tmin=$((t/60))
t0s=$((t0%60))
t0min=$((t0/60))
echo -ne "[INFO] Processing image: ${k} / ${n} . ${t0min} min ${t0s} s écoulées sur ${tmin} min ${ts} s estimées \033[0K\r"
done;
Précisions pour les non spécialistes des commandes et scripts :
La première commande s’utilise dans un terminal Linux. Le répertoire courant doit être celui contenant le fichier panoramax-logo.png. Le fichier créé sera encore dans ce dossier.
Le second script doit être enregistré dans un fichier finissant par .sh (grâce à gedit ou autre éditeur de code/texte). Il doit ensuite être rendu exécutable (par un clic droit → propriétés → Permissions → Autoriser le fichier comme exécutable). Puis enfin, vous pouvez l’exécuter dans un terminal à l’aide de la commande ./nom_du_fichier.sh . Avant de l’exécuter, veillez à avoir modifié la variable dossier (dossier=l'emplacement absolu du dossier à traiter)
Patchanka
(Laura Mouchet (SIG Ville de Bayonne))
28
Bonjour
je me suis dit que j’allais enfin tester ça sérieusement pour pouvoir faire une doc pour les gens comme moi pour qui ce n’est pas simple (et qui généralement n’osent pas dire sur le forum qu’ils n’ont rien compris)
est-ce que c’est une procédure qui marche pour Windows ou juste pour Linux ?
il faut installer des trucs ? Pour ma part, j’ai déjà ImageMagick, mais pas jpegtran et je ne sais pas quelle source utiliser pour l’installer (j’ai trouvé un exe mais qui ne fait rien quand je le lance… est-ce normal, aucune idée)
d’une manière générale, où écrire ces lignes de code ?
j’ai créé un .bat avec la 1ère ligne de code dans le même dossier que mon logo carré (et remplacé panoramax-logo.png par mon logo, mais quand je l’exécute ça ne créé pas de nouveau fichier…
J’ai mis à jour mon post précédent pour ajouter des informations pour les personnes qui n’ont pas l’habitude d’utiliser les commandes et les scripts shell. Malheureusement, c’est uniquement pour Linux (et peut-être Mac OS).
Je ne suis pas assez connaisseur de Windows mais je n’ai pas l’impression que les commandes de @cquest fonctionnent sous Windows (ce sont des programmes linux et la commande convert fait des choses très différentes sous Windows). En général, ces lignes de code doivent être écrites dans l’invite de commande de Windows/Linux/Mac OS.
Sous Windows une solution… WSL qui permet de se retrouver dans un quasi linux.
Patchanka
(Laura Mouchet (SIG Ville de Bayonne))
31
bonjour
si je comprends bien les réponses, le code proposé dans ce sujet est donc valable effectivement uniquement sur Linux ? Ça vaudrait le coup de le préciser (en général).
Pour ma part, c’est déjà assez compliqué sans avoir à rajouter encore un autre outil. Et les personnes dont je parle dans mon post, sont des agents de collectivités qui sont majoritairement sous Windows (qu’on soit ou non d’accord avec ce choix).
Je vais donc rester sur mon process qui fonctionne avec Nadir-Patcher (et continuer de conseiller cet outil) en attendant le développement de l’option permettant de le faire directement dans Panoramax
Non, la plupart des commandes marchent sous Windows.
Quant au script, oui c’est du Linux, mais comme dit par @cquest avec WSL ça marche très bien. Certes une installation de plus.
Je suis aussi sur Windows, et comme précisé, ces commandes fonctionnent bien sous cet OS :
Après, pour l’exécution sur un dossier entier, j’ai choisi Python pour automatiser le traitement, mais ça peut certainement se faire en Batch aussi.
Sylvain (qui n’a pas encore fait la bascule > Linux, mais qui la fera dans les mois à venir, c’est prévu ! enfin, à titre perso, car pro, ça va être très compliqué !)