#1 Le 23/05/2010, à 22:29
- Ferod
Génération fichier xml pour les fonds d'écran
Bonjour
Je me suis fait un petit script pour générer un fichier xml pour s'en servir comme fond d'écran. C'est fait sans prétention juste pour que ce soit utile et fonctionnel.
Pour l'utiliser c'est assez simple, vous mettez le script et les images dans le dossier de votre choix, avec un terminal rendez vous dans le répertoire en question, puis tapez la commande ./nomDuScript et hop vous obtenez un fichier wallpaper.xml près à l'utilisation.
Pour ceux qui sont allergique à la ligne de commande, rendre le script exécutable et double cliquer dessus puis choisir 'Lancer dans un terminal'.
Il doit pas manquer grand chose pour que ça puisse être utilisé avec nautilus-action...
#!/bin/bash
touch Wallpaper.xml
echo "<background>" > Wallpaper.xml
echo " <starttime>" >> Wallpaper.xml
echo " <year>2009</year>" >> Wallpaper.xml
echo " <month>08</month>" >> Wallpaper.xml
echo " <day>04</day>" >> Wallpaper.xml
echo " <hour>00</hour>" >> Wallpaper.xml
echo " <minute>00</minute>" >> Wallpaper.xml
echo " <second>00</second>" >> Wallpaper.xml
echo " </starttime>" >> Wallpaper.xml
echo "<!-- This animation will start at midnight. -->" >> Wallpaper.xml
repertoire=$PWD
rank=1
for i in $(ls *.jpg) ; do
ligneFile="<file>"$repertoire"/"$i"</file>"
ligneFrom="<from>"$repertoire"/"$i"</from>"
ligneTo="<to>"$repertoire"/"$i"</to>"
if [ $rank -eq 1 ]; then
premierFichier=$i
echo " <static>" >> Wallpaper.xml
echo " <duration>1795.0</duration>" >> Wallpaper.xml
echo " "$ligneFile >> Wallpaper.xml
echo " </static>" >> Wallpaper.xml
echo " <transition>" >> Wallpaper.xml
echo " <duration>5.0</duration>" >> Wallpaper.xml
echo " "$ligneFrom >> Wallpaper.xml
let $[ rank += 1 ]
else
echo " "$ligneTo >> Wallpaper.xml
echo " </transition>" >> Wallpaper.xml
echo " <static>" >> Wallpaper.xml
echo " <duration>1795.0</duration>" >> Wallpaper.xml
echo " "$ligneFile >> Wallpaper.xml
echo " </static>" >> Wallpaper.xml
echo " <transition>" >> Wallpaper.xml
echo " <duration>5.0</duration>" >> Wallpaper.xml
echo " "$ligneFrom >> Wallpaper.xml
let $[ rank += 1 ]
fi
done
ligneTo="<to>"$repertoire"/"$premierFichier"</to>"
echo " "$ligneTo >> Wallpaper.xml
echo " </transition>" >> Wallpaper.xml
echo "</background>" >> Wallpaper.xml
Dernière modification par Ferod (Le 23/05/2010, à 22:35)
"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich
Hors ligne
#2 Le 15/11/2010, à 12:41
- artemis-artetphotos
Re : Génération fichier xml pour les fonds d'écran
Vraiment super ce petit script. Ca fonctionne très bien chez moi.
Merci beaucoup!
Hors ligne
#3 Le 09/12/2010, à 16:43
- Lad
Re : Génération fichier xml pour les fonds d'écran
Bonjour
Sympa ton script. Est ce que tu as des indications sur comment ça marche et sur le sens de duration ?
Merci
Hors ligne
#4 Le 09/12/2010, à 18:35
- Ferod
Re : Génération fichier xml pour les fonds d'écran
Oui vaguement (j'ai rien inventé hein).
Tu as deux phases :
- Phase statique : il y a 2 paramètres :
- image à afficher
- durée : la durée en seconde de l'affichage de l'image.
- Phase transition ; ce coup ci il y a 3 paramètres
- image de départ
- image d'arrivée
- durée : la durée de la transition entre les deux images en secondes
Ensuite il faut lui donner une date au début du fichier pour qu'il puisse calculer à la date d'aujourd'hui quel image il faut afficher. Dans le script c'est le 4/8/2009. Et c'est bon !
Dernière modification par Ferod (Le 09/12/2010, à 18:35)
"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich
Hors ligne
#5 Le 10/12/2010, à 21:43
- Vaderf
Re : Génération fichier xml pour les fonds d'écran
Bonjour à tous,
Merci Ferod pour ce bout de code. Pour ma part, j'avais fait un script un tout petit peu différent (qui permettait de choisir les images une à une). J'ai trouvé ton idée pas mal. Du coup, j'ai fusionné nos deux scripts. Et cerise sur le gâteau, il s'agit d'un script nautilus.
Pour ceux qui ne connaissent pas les scripts nautilus : doc
Voici le code :
#!/bin/bash
#auteurs : Vaderf <vaderf at free point fr> & Ferod
#version : 1.0
#date de création : 2010-09-14
#date de modification : 2010-12-10
#licence : GPL v2
#--------------
# Commentaires
#--------------
# Ce script n'est pas garanti sans bugs (même après de très nombreux tests) et est à utiliser à vos risques et périls.
# Il doit être exécuté sur un dossier.
#-----------
# Variables
#-----------
# c : variable arbitraire
# cx : choix
# d : dossier de stockage du fichier .xml
# r : réponse
# nb : nombre d'éléments
# nt : nom du chemin retraité
# ti : temps d'affichage de l'image
# tt : temps de transition
#-------------------------------------
# Entrées des paramètres du diaporama
#-------------------------------------
cx=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous traiter le dossier en une seule fois ou choisir chaque image ?" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then exit 1; fi;
n=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Quel nom donné au fichier de configuration (ex.: Paysages d'été) ?"); if [ $? -eq 1 ];then exit 1; fi;
zenity --info --title="Créateur de fonds d'écran animés" --text="Vous allez maintenant sélectionner le dossier dans lequel le fichier sera sauvegardé."
d=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --filename="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --directory); if [ $? -eq 1 ];then exit 1; fi;
tt=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Combien de temps doit durer la transition entre deux images ? (temps en secondes)" --entry-text="5"); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
ti=$(zenity --entry --title="Créateur de fonds d'écran animés" --text="Combien de temps l'image restera-t-elle a l'écran ? (temps en secondes)" --entry-text="1800"); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
#---------------------------------------------------------------
# Traitement de l'ensemble du dossier (partie créée par Ferod)
#---------------------------------------------------------------
case $cx in
Oui)
nt=$(echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sed 's/ /\ /g') #Ajoute un caractère d'échappement aux espaces
l=$(ls "$nt"/*.jp*)
IFS=$'\n' #Change le séparateur standard (espace) pour RETURN (utile pour $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
nb=$(echo "$l" | sed -n '$=')
touch "$d/$n.xml"
echo "<background>" > "$d/$n.xml"
echo " <starttime>" >> "$d/$n.xml"
echo " <year>2009</year>" >> "$d/$n.xml"
echo " <month>08</month>" >> "$d/$n.xml"
echo " <day>04</day>" >> "$d/$n.xml"
echo " <hour>00</hour>" >> "$d/$n.xml"
echo " <minute>00</minute>" >> "$d/$n.xml"
echo " <second>00</second>" >> "$d/$n.xml"
echo " </starttime>" >> "$d/$n.xml"
echo "<!-- This animation will start at midnight. -->" >> "$d/$n.xml"
rank=1
for i in $l ; do
ligneFile="<file>""$i""</file>"
ligneFrom="<from>""$i""</from>"
ligneTo="<to>""$i""</to>"
if [[ $rank -eq 1 ]]; then
premierFichier=$i
echo " <static>" >> "$d/$n.xml"
echo " <duration>$ti</duration>" >> "$d/$n.xml"
echo " "$ligneFile >> "$d/$n.xml"
echo " </static>" >> "$d/$n.xml"
echo " <transition>" >> "$d/$n.xml"
echo " <duration>$tt</duration>" >> "$d/$n.xml"
echo " "$ligneFrom >> "$d/$n.xml"
((cp ++)) #Compteur nécessaire pour zenity
echo $((rank*100/nb)) #Incrémentation du compteur
let $[ rank=$rank+1 ]
else
echo " "$ligneTo >> "$d/$n.xml"
echo " </transition>" >> "$d/$n.xml"
echo " <static>" >> "$d/$n.xml"
echo " <duration>1795.0</duration>" >> "$d/$n.xml"
echo " "$ligneFile >> "$d/$n.xml"
echo " </static>" >> "$d/$n.xml"
echo " <transition>" >> "$d/$n.xml"
echo " <duration>5.0</duration>" >> "$d/$n.xml"
echo " "$ligneFrom >> "$d/$n.xml"
((cp ++)) #Compteur nécessaire pour zenity
echo $((rank*100/nb)) #Incrémentation du compteur
let $[ rank=$rank+1 ]
fi
done | zenity --progress --title="Créateur de fonds d'écran animés" --text="La construction est en cours" --auto-close; if [ $? -eq 1 ];then exit; fi;
ligneTo="<to>""$premierFichier""</to>"
echo " "$ligneTo >> "$d/$n.xml"
echo " </transition>" >> "$d/$n.xml"
echo "</background>" >> "$d/$n.xml"
;;
esac
#------------------------------
# Traitement images par images
#------------------------------
case $cx in
Non)
# Entête du fichier de configuration
cat > "$d/$n.xml" << EOF
<background>
<starttime>
<year>2009</year>
<month>08</month>
<day>04</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
<!-- This animation will start at midnight. -->
EOF
# Ajout du premier chemin dans le fichier de configuration
f1=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --separator=" "); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
cat >> "$d/$n.xml" << EOF
<static>
<duration>$ti</duration>
<file>$f1</file>
</static>
<transition>
<duration>$tt</duration>
<from>$f1</from>
EOF
# Ajout des chemins suivant dans le fichier
c=0
while [[ $c -eq 0 ]]
do
fx=$(zenity --file-selection --title="Créateur de fonds d'écran animés" --filename="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --separator=" "); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
cat >> "$d/$n.xml" << EOF
<to>$fx</to>
</transition>
<static>
<duration>$ti</duration>
<file>$fx</file>
</static>
<transition>
<duration>$tt</duration>
<from>$fx</from>
EOF
r=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous ajouter un autre fichier ?" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
case $r in
Oui)
;;
Non)
c=1
;;
esac
done
# Finalisation du fichier fichier
cat >> "$d/$n.xml" << EOF
<to>$f1</to>
</transition>
</background>
EOF
;;
esac
#---------------------------------------------------------
# Ajout du fichier diaporama à la liste des fonds d'écran
#---------------------------------------------------------
r=$(zenity --list --title="Créateur de fonds d'écran animés" --text="Voulez-vous ajouter votre diaporama à la liste des fonds d'écran ? (conseillé) (ne fonctionne qu'avec Gnome)" --column="Votre choix :" Oui Non); if [ $? -eq 1 ];then rm "$d/$n.xml"; exit 1; fi;
case $r in
Oui)
gnome-appearance-properties "$d/$n".xml
;;
Non)
;;
esac
exit 0
Pour qu'il soit intégré au menu déroulant de nautilus, voici la marche à suivre :
Ouvrir le dossier ~/.gnome2/nautilus-scripts.
Ajouter un fichier vierge qu'on peut nommer Créateur de fonds d'écran animés par exemple
Y coller le code ci-dessus
Rendre ce script exécutable comme suit :
chmod u+x ~/.gnome2/nautilus-scripts/Créateur de fonds d'écran animés
En cliquant droit sur le dossier qui contient les images, choisir le menu Scripts -> Créateur de fonds d'écran animés
Je suis ouvert à toute critique ou suggestion !
En espérant que ma modeste contribution aide quelques personnes !
A+
Dernière modification par Vaderf (Le 12/12/2010, à 22:45)
Asus UL80Vt
Ubuntu 11.10
Hors ligne
#6 Le 12/12/2010, à 12:03
- Ferod
Re : Génération fichier xml pour les fonds d'écran
Merci à toi aussi pour la grosse amélioration !
"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich
Hors ligne