1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
| #!/usr/bin/perl
#==========================================================================
# Auteur : djibril
# Date : 19/08/2012 15:39:12
# But : Création du fichier XML pour le diaporama de fond d'écran Gnome
#==========================================================================
use warnings;
use strict;
use Cwd;
use English '-no_match_vars';
use File::Spec;
use File::Basename qw/basename dirname/;
use Getopt::Long;
my $USAGE = <<"USAGE";
perl $PROGRAM_NAME -r '/path1/to/image' -r '/path2/to/image' -t XXX -d YYY
-r : permet de spécifier un repertoire d'images pour le diaporama. On peut faire appel plusieurs
fois pour mentionner plusieurs repertoire.
-t : donnez la duree de transition entre chaque image en secondes (ex : XXX = 1 pour 1 seconde). Par defaut 2.
-d : donnez la duree d'affichage de chaque image en secondes (ex : YYY = 60 pour 60 secondes). Par defaut 60.
USAGE
# Récupération des arguments
my ( @repertoires_images, $duree_transition, $duree_affichage ) = ();
GetOptions(
'r=s' => \@repertoires_images,
't=i' => \$duree_transition,
'd=i' => \$duree_affichage,
);
my @extensions = qw/ jpeg jpg jpe bmp svg gif png /;
# Vérification des arguments
# Répertoires images
if ( scalar @repertoires_images == 0 ) {
print "Merci de mentionner au moins un répertoire d'images\n\n$USAGE";
exit;
}
foreach my $repertoire ( @repertoires_images ) {
if ( ! -e $repertoire ) {
print "$repertoire n'existe pas\n";
exit;
}
}
# Vérification temps d'affichage et de transition.
if ( not defined $duree_affichage) {
$duree_affichage = 60;
}
if ( not defined $duree_transition ) {
$duree_transition = 2;
}
$duree_affichage = sprintf '%.1f', $duree_affichage;
$duree_transition = sprintf '%.1f', $duree_transition;
my $diaporama_xml = 'diaporama-gnome.xml';
# Liste des images à mettre dans le diaporama après un parcours récursif des répertoire d'images
my $regex_extension = join '|', @extensions;
my @fichiers_images;
foreach ( @repertoires_images ) {
push @fichiers_images, grep { /$regex_extension$/i } lister_fichiers($_, 1);
}
# Création du fichier XML du diaporama
open my $fh, '>:encoding(UTF-8)', $diaporama_xml or die "Impossible de créer le fichier $diaporama_xml\n";
print {$fh} <<'ENTETE';
<?xml version="1.0" encoding="UTF-8"?>
<background>
<starttime>
<year>2012</year>
<month>08</month>
<day>19</day>
<hour>00</hour>
<minute>00</minute>
<second>00</second>
</starttime>
<!-- Debut du diaporama -->
ENTETE
my $last = scalar @fichiers_images - 1;
for my $index ( 0..$last) {
my $suivant = ( $index == $last ) ? 0 : $index +1;
# Static et transition
print {$fh} <<"DIAPO";
<static>
<duration>$duree_affichage</duration> <!-- temps pendant lequel cette image est affichee -->
<file>$fichiers_images[$index]</file> <!-- chemin absolu vers l'image en cours-->
</static>
<transition>
<duration>$duree_transition</duration> <!-- duree de l'effet de transition -->
<from>$fichiers_images[$index]</from> <!-- chemin absolu vers l'image en cours -->
<to>$fichiers_images[$suivant]</to> <!-- chemin absolu vers l'image suivante -->
</transition>
DIAPO
}
print {$fh} '</background>';
close $fh;
print "Fichier $diaporama_xml OK\n";
#======================================================
# Nombre d'arguments : 1 ou 2
# Argument(s) : un répertoire et valeur 0 ou 1
# Retourne : Tableau de fichier (@fichiers)
#======================================================
sub lister_fichiers {
my ( $repertoire, $recursivite ) = @_;
my $cwd = getcwd();
# Recherche dans les sous répertoire ou non
if ( ( not defined $recursivite ) || ( $recursivite != 1 ) ) { $recursivite = 0; }
# Verification répertoire
if ( not defined $repertoire ) { die "Aucun repertoire de specifie\n"; }
# Ouverture d'un répertoire
opendir my $fh_rep, $repertoire or die "impossible d'ouvrir le répertoire $repertoire\n";
# Liste fichiers et répertoire sauf (. et ..)
my @fic_rep = grep { !/^\.\.?$/ } readdir $fh_rep;
# Fermeture du répertoire
closedir $fh_rep or die "Impossible de fermer le répertoire $repertoire\n";
chdir $repertoire;
$repertoire= getcwd();
# On récupère tous les fichiers
my @fichiers;
foreach my $nom (@fic_rep) {
my $notre_ficrephier = File::Spec->catfile( $repertoire, $nom );
if ( -f $notre_ficrephier ) {
push( @fichiers, $notre_ficrephier );
}
elsif ( -d $notre_ficrephier and $recursivite == 1 ) {
push( @fichiers, lister_fichiers($notre_ficrephier, $recursivite) ); # recursivité
}
}
chdir $cwd;
return @fichiers;
} |
Partager