Linux-magazine.it Forum
Maggio 24, 2012, 03:40:13 pm *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?
 
Pagine: [1] 2   Vai giù
  Stampa  
Autore Discussione: Script per Slideshow di immagini sul desktop  (Letto 2525 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
radioresa
Newbie
*

Karma: +2/-0
Scollegato Scollegato

Messaggi: 25

radio.resa@hotmail.it
Mostra profilo
« inserita:: Gennaio 09, 2011, 11:30:38 am »

Salve a tutti  Ghigno
L'altro giorno stavo pasticciando sul mio portatile in assenza di internet  Linguaccia e ho visto che si può usare come sfondo un .XML... ho dato un'occhiata al codice e volevo crearne uno per delle mie immagini.
Così mi è venuta l'idea di fare uno script per creare questo .xml da una cartella di files, anche se credo che esistano già programmi che fanno la stessa cosa.

Ecco il codice:
Codice:
cartella=$PWD # cartella attuale
output_file="slideshow.xml" # file di output
secondi="5" # durata in secondi di ogni immagine nella slideshow
if [ -e ${output_file} ] # controlla se il file esiste già
then
rm ${output_file} # lo cancella
fi
touch ${output_file}  # crea un file

echo "<background><starttime><year>2009</year><month>08</month><day>04</day><hour>00</hour><minute>00</minute><second>00</second></starttime>" >> ${output_file}

for elemento in $(ls ${cartella} | grep -i .jpg) # prende i files con estensione .jpg o .JPG
do
if [ -f ${elemento} ] #controlla se i file sono effettivamente file e non directory
then
echo "<static><duration>${secondi}.0</duration><file>${cartella}/${elemento}</file></static>" >> ${output_file}
fi
done

for elemento in $(ls ${cartella} | grep -i .png) # prende i files con estensione .png o .PNG
do
if [ -f ${elemento} ] #controlla se i file sono effettivamente file e non directory
then
echo "<static><duration>${secondi}.0</duration><file>${cartella}/${elemento}</file></static>" >> ${output_file}
fi
done

for elemento in $(ls ${cartella} | grep -i .jpeg) # prende i files con estensione .jpeg o .JPEG
do
if [ -f ${elemento} ] #controlla se i file sono effettivamente file e non directory
then
echo "<static><duration>${secondi}.0</duration><file>${cartella}/${elemento}</file></static>" >> ${output_file}
fi
done

echo "</background>" >> ${output_file}


Si accettano consigli, modifiche e, perchè no, anche insulti  Linguaccia se ho aperto una discussione inutile.
Ciao
Registrato
michele.p
Global Moderator
Hero Member
*****

Karma: +49/-44
Scollegato Scollegato

Messaggi: 6741



Mostra profilo
« Risposta #1 inserita:: Gennaio 09, 2011, 07:39:11 pm »

Citazione
Si accettano consigli, modifiche e, perchè no, anche insulti  Linguaccia se ho aperto una discussione inutile.

...e perché mai, anzi proprio perché hai reso l'idea disponibile sul forum potresti ricevere migliorie e/o aggiunte allo script.  Felice

Bye  Fico
Registrato

radioresa
Newbie
*

Karma: +2/-0
Scollegato Scollegato

Messaggi: 25

radio.resa@hotmail.it
Mostra profilo
« Risposta #2 inserita:: Gennaio 09, 2011, 10:47:24 pm »

Grazie michele.p  Occhiolino

Ho già un miglioramento da fare, in realtà: se si imposta come file di output un file *.jpg (o comunque un'estensione da immagine) sarà ancora più comodo usare l'xml come sfondo perché basterà fare tasto destro -> Set as Wallpaper... per ottenere il risultato.

Ciao  Ghigno
Registrato
michele.p
Global Moderator
Hero Member
*****

Karma: +49/-44
Scollegato Scollegato

Messaggi: 6741



Mostra profilo
« Risposta #3 inserita:: Gennaio 10, 2011, 02:51:26 pm »

Per rendere lo script più leggibile potresti spostare anche sopra la riga i commenti che ora sono a fianco delle righe.  Sorriso

Bye  Fico
Registrato

Ema90
Hero Member
*****

Karma: +4/-5
Scollegato Scollegato

Messaggi: 533


Buon 2012


Mostra profilo
« Risposta #4 inserita:: Gennaio 10, 2011, 08:08:42 pm »

Ho visto che nel file XML di esempio in /usr/share/backgrounds è presente anche l'effetto di transazione da un'immagine all'altra.
Registrato

radioresa
Newbie
*

Karma: +2/-0
Scollegato Scollegato

Messaggi: 25

radio.resa@hotmail.it
Mostra profilo
« Risposta #5 inserita:: Gennaio 10, 2011, 11:02:07 pm »

@ michele.p
Se devo essere sincero non avevo proprio messo commenti, poi li ho aggiunti qui sul forum per spiegare meglio...
Forse devo imparare a mettere subito i commenti perchè mi capita spesso di ritrovare vecchi scripts e non capirci niente  Ghigno

@Ema90

Sì... ho visto anche io che c'era l'effetto di transizione, spero di metterlo nella "nuova versione" dello script.
Ho messo la possibilità di scegliere la durata di ogni immagine e, perchè no, anche di inserire la transizione.

Grazie a tutti  Occhiolino
Registrato
Morfeo
Sr. Member
****

Karma: +1/-1
Scollegato Scollegato

Messaggi: 374



Mostra profilo E-mail
« Risposta #6 inserita:: Gennaio 11, 2011, 09:47:51 am »

è molto interessante invece come idea...anche perchè permette in qualche modo di capire come funziona ...Sorriso
se ti può interessare c'è un progetto simile che si chiama Desktop Drapes che cambia le immagini della scrivania in modo casuale..

Occhiolino
Registrato

./configure
  make
  make install
Ema90
Hero Member
*****

Karma: +4/-5
Scollegato Scollegato

Messaggi: 533


Buon 2012


Mostra profilo
« Risposta #7 inserita:: Gennaio 11, 2011, 10:27:02 am »

Se può interessare , per cambiare lo sfondo da terminale (in Gnome) basta questo comando:
/usr/bin/gconftool-2 -t string -s /desktop/gnome/background/picture_filename PATH_NAME
sostituendo PATH_NAME con il vostro file
Registrato

radioresa
Newbie
*

Karma: +2/-0
Scollegato Scollegato

Messaggi: 25

radio.resa@hotmail.it
Mostra profilo
« Risposta #8 inserita:: Gennaio 11, 2011, 10:32:27 pm »

Udite udite... mi sono bloccato  Indeciso

Ho fatto in  modo di poter impostare quanto tempo deve stare ogni immagine, se mettere la transizione e quanto farla durare...

Tutto funziona tranne una cosa alla fine: vi posto un esempio dell'XML
Codice:
<background><starttime><year>2009</year><month>08</month><day>04</day><hour>00</hour><minute>00</minute><second>00</second></starttime>
<static><duration>12</duration><file>IMMAGINE 1</file></static>
<transition type="overlay"><duration>5</duration>
<from>IMMAGINE 1</from>
<to>IMMAGINE 2</to></transition>
<static><duration>12</duration><file>IMMAGINE 2</file></static>
<transition type="overlay"><duration>5</duration>
<from>IMMAGINE 2</from>
<to>IMMAGINE 3</to></transition>
<static><duration>12</duration><file>IMMAGINE 3</file></static>
<transition type="overlay"><duration>5</duration>
<from>IMMAGINE 3</from>
</background>

In pratica il loop inserisce al fondo un abbozzo di transizione che però non finisce in nessuna immagine... la cosa più semplice sarebbe cancellare le ultime due righe prima di aggiungere il </background>... ma non so come fare.
Ho provato a fare qualcosa con sed, con man cut ma nn riesco a trovare una soluzione...
Di sicuro c'è un metodo semplice... ma qual'è?  Ghigno
Grazie anticipatamente a tutti  Occhiolino
Registrato
Ema90
Hero Member
*****

Karma: +4/-5
Scollegato Scollegato

Messaggi: 533


Buon 2012


Mostra profilo
« Risposta #9 inserita:: Gennaio 11, 2011, 11:21:31 pm »

Ciao io l'ho modificato così
Codice:
cartella=$PWD # cartella attuale
output_file="slideshow.xml" # file di output
secondi="20" # durata in secondi di ogni immagine nella slideshow
durata_transizione="5" # secondi

echo "<background><starttime><year>2009</year><month>08</month><day>04</day><hour>00</hour><minute>00</minute><second>00</second></starttime>" > ${output_file}

for elemento in $(ls ${cartella} | grep -i .jpg) # prende i files con estensione .jpg o .JPG
do
echo ${elemento} # stampa a video i nomi dei file
done
# metto l'inizio della transizione con l'ultimo file , la prima volta non sarà bello ma essendo ciclico è giusto così
echo "<transition> <duration>${durata_transizione}.0</duration> <from>${cartella}/${elemento}</from>" >> ${output_file}

for elemento in $(ls ${cartella} | grep -i .jpg) # prende i files con estensione .jpg o .JPG
do
echo "<to>${cartella}/${elemento}</to> </transition>" >> ${output_file}
echo "<static><duration>${secondi}.0</duration><file>${cartella}/${elemento}</file></static>" >> ${output_file}
echo "<transition> <duration>${durata_transizione}.0</duration> <from>${cartella}/${elemento}</from>" >> ${output_file}
done

echo "</background>" >> ${output_file}
Mi produce un xml che per quanto poco sia leggibile mi va bene.  Ghigno
Registrato

Ema90
Hero Member
*****

Karma: +4/-5
Scollegato Scollegato

Messaggi: 533


Buon 2012


Mostra profilo
« Risposta #10 inserita:: Gennaio 12, 2011, 09:10:42 am »

Stanotte ci ho ripensato , hai ragione bisogna eliminare l'ultima riga così ho usato un contatore e un indice:
Codice:
cartella=$PWD # cartella attuale
output_file="slideshow.xml" # file di output
secondi="20" # durata in secondi di ogni immagine nella slideshow
durata_transizione="5" # secondi
n=0
c=0

echo "<background><starttime><year>2009</year><month>08</month><day>04</day><hour>00</hour><minute>00</minute><second>00</second></starttime>" > ${output_file}

for elemento in $(ls ${cartella} | grep -i .jpg) # prende i files con estensione .jpg o .JPG
do
echo ${elemento} # stampa a video i nomi dei file
let n=$n+1 # conto il numero degli elementi
done
echo $n
# metto l'inizio della transizione con l'ultimo file , la prima volta non sarà bello ma essendo ciclico è giusto così
echo "<transition> <duration>${durata_transizione}.0</duration> <from>${cartella}/${elemento}</from>" >> ${output_file}

for elemento in $(ls ${cartella} | grep -i .jpg) # prende i files con estensione .jpg o .JPG
do
let c=$c+1 # tengo l'indice degli elementi
echo "<to>${cartella}/${elemento}</to> </transition>" >> ${output_file}
echo "<static><duration>${secondi}.0</duration><file>${cartella}/${elemento}</file></static>" >> ${output_file}
if [ $c != $n ] # se non è l'ultimo elemento
then
echo "<transition> <duration>${durata_transizione}.0</duration> <from>${cartella}/${elemento}</from>" >> ${output_file}
fi
done

echo "</background>" >> ${output_file}
« Ultima modifica: Gennaio 12, 2011, 02:52:43 pm da Ema90 » Registrato

radioresa
Newbie
*

Karma: +2/-0
Scollegato Scollegato

Messaggi: 25

radio.resa@hotmail.it
Mostra profilo
« Risposta #11 inserita:: Gennaio 12, 2011, 09:18:52 pm »

Allora... ho sistemato quasi tutto. Lo script funziona.
@Ema90: Che bello sapere che c'è qualcuno oltre a me che sogna gli script di notte  Ghigno A parte gli scherzi... la tua idea mi è stata molto d'aiuto. Devo capire se mettere una slideshow anche alla prima immagine: non ho avuto il tempo di verificare ma ho paura che una transizione dal nulla ad un'immagine generi un errore...
Codice:
#! /bin/bash

########################################################
## Script per creare slideshow per lo sfondo di Gnome ##
########################################################


#################################
## Definizione delle variabili ##
#################################

# Cartella attuale
cartella=$PWD

# File di output a scelta
output_file="slideshow.xml"

# Lista delle estensioni di file accettate
lista_estensioni=".jpg .jpeg .png"

for ext in $lista_estensioni; do
num_file=$(($(ls ${cartella} | grep -i $ext | wc -w) + num_file))
done


echo -n "Durata in secondi di ogni immagine: "
read durata

#########################################
## Controlla se la durata è un numero. ##
#########################################

if [ "$durata" != "$(echo $durata | grep "^[0-9]*$")" ]; then
echo "Valore non corretto."
sleep 3
exit
fi


echo -n "Vuoi inserire una transizione tra un'immagine e l'altra? (s,n): "
read risposta


#####################################################################################
## Controlla se è stata richiesta la transizione e verifica il valore della durata ##
#####################################################################################

if [ "${risposta}" = "s" ]; then
transizione="1"

echo -n "Quanti secondi deve durare la transizione? "
read tempo_transizione

if [ "$tempo_transizione" != "$(echo $tempo_transizione | grep "^[0-9]*$")" ]; then
echo "Valore non corretto."
sleep 3
exit
fi
elif [ "${risposta}" = "n" ]; then
transizione="0"
else
echo "Scelta errata."
sleep 3
exit
fi

###########################################################
## Cancella il file esistente se c'è e ne crea uno nuovo ##
###########################################################


if [ -e ${output_file} ]; then
rm ${output_file}
fi

touch ${output_file}

############################################
## Scrive sul file la prima riga dell'XML ##
############################################

echo "<background><starttime><year>2009</year><month>08</month><day>04</day><hour>00</hour><minute>00</minute><second>00</second></starttime>" >> ${output_file}

#########################################
## AGGIUNTA DELLE IMMAGINI AL FILE XML ##
#########################################

for estensioni in $lista_estensioni; do
echo $estensioni
c="0"
for elemento in $(ls ${cartella} | grep -i $estensioni); do
let c=$c+1
echo "$c - $num_file"
# Fatta eccezione per la prima immagine, completa il comando di transizione dell'immagine precedente
if [ "$c" != "1" ] && [ "$transizione" = "1" ]; then
echo "<to>${cartella}/${elemento}</to></transition>" >> ${output_file}
fi

echo "<static><duration>${durata}</duration><file>${cartella}/${elemento}</file></static>" >> ${output_file}

# Fatta eccezione per l'ultima immagine, inizia il comando di transizione dell'immagine attuale
if [ "$c" != "$num_file" ] && [ "$transizione" = "1" ]; then
echo "<transition type=\"overlay\"><duration>${tempo_transizione}</duration>" >> ${output_file}
echo "<from>${cartella}/${elemento}</from>" >> ${output_file}
fi
done
done

##########################################
## Chiude il file XML con </background> ##
##########################################

echo "</background>" >> ${output_file}

#######################################################
## Chiedo se si vuole usare la slideshow come sfondo ##
#######################################################

echo -n "Vuoi usare la slideshow come sfondo? (s,n): "
read risposta2

if  [ "${risposta2}"="s" ]; then
/usr/bin/gconftool-2 -t string -s /desktop/gnome/background/picture_filename ${cartella}/${output_file}
fi

Il codice è un po' lungo ma funziona.

Ciao  Occhiolino
Registrato
Morfeo
Sr. Member
****

Karma: +1/-1
Scollegato Scollegato

Messaggi: 374



Mostra profilo E-mail
« Risposta #12 inserita:: Gennaio 13, 2011, 12:45:06 pm »

..uhm  Occhi al cielo

mi potreste spiegare come e dove utilizzare questo xml ?
mi piacerebbe imparare ad utilizzarlo  Bacio

Occhiolino
Registrato

./configure
  make
  make install
Ema90
Hero Member
*****

Karma: +4/-5
Scollegato Scollegato

Messaggi: 533


Buon 2012


Mostra profilo
« Risposta #13 inserita:: Gennaio 13, 2011, 04:06:35 pm »

Attualmente questo script funziona solo mettendolo nella stessa cartella delle immagini e lanciandolo genera un file xml , tale file devi metterlo come sfondodel desktop
Registrato

radioresa
Newbie
*

Karma: +2/-0
Scollegato Scollegato

Messaggi: 25

radio.resa@hotmail.it
Mostra profilo
« Risposta #14 inserita:: Gennaio 13, 2011, 05:00:01 pm »

@Ema 90:
Sì, sarebbe comodo poter scegliere da quale cartella prendere i files... Come fare per prendere per esempio tutte le immagini della cartella immagini comprese le sottocartelle? Cercherò un metodo...

@Morfeo:
Questo .XML lo puoi usare come sfondo del desktop, ovvero: se invece di impostare come sfondo un'immagine, usi questo file, il risultato sarà che lo sfondo del desktop cambierà automaticamente immagine.
Dove utilizzarlo: basta che vai sulle impostazioni dello sfondo, selezioni un nuovo file (devi impostare la visualizzazione di TUTTI i files altrimenti mostra solo le immagini) e lo imposti come sfondo.

Se invece vuoi usare lo script devi salvarlo come file .SH e dargli i permessi di esecuzione, poi eseguirlo da terminale con ./nomecomando.sh
Registrato
Pagine: [1] 2   Vai su
  Stampa  
 
Vai a: