radioresa
Newbie
Karma: +2/-0
Scollegato
Messaggi: 25
|
 |
« inserita:: Gennaio 09, 2011, 11:30:38 am » |
|
Salve a tutti  L'altro giorno stavo pasticciando sul mio portatile in assenza di internet  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: 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  se ho aperto una discussione inutile. Ciao
|
|
|
|
|
Registrato
|
|
|
|
|
michele.p
|
 |
« Risposta #1 inserita:: Gennaio 09, 2011, 07:39:11 pm » |
|
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.  Bye 
|
|
|
|
|
Registrato
|
|
|
|
radioresa
Newbie
Karma: +2/-0
Scollegato
Messaggi: 25
|
 |
« Risposta #2 inserita:: Gennaio 09, 2011, 10:47:24 pm » |
|
Grazie michele.p  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 
|
|
|
|
|
Registrato
|
|
|
|
|
michele.p
|
 |
« 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.  Bye 
|
|
|
|
|
Registrato
|
|
|
|
|
Ema90
|
 |
« 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
Messaggi: 25
|
 |
« 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  @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 
|
|
|
|
|
Registrato
|
|
|
|
|
Morfeo
|
 |
« 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 ...  se ti può interessare c'è un progetto simile che si chiama Desktop Drapes che cambia le immagini della scrivania in modo casuale.. 
|
|
|
|
|
Registrato
|
./configure make make install
|
|
|
|
Ema90
|
 |
« 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
Messaggi: 25
|
 |
« Risposta #8 inserita:: Gennaio 11, 2011, 10:32:27 pm » |
|
Udite udite... mi sono bloccato  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 <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'è?  Grazie anticipatamente a tutti 
|
|
|
|
|
Registrato
|
|
|
|
|
Ema90
|
 |
« Risposta #9 inserita:: Gennaio 11, 2011, 11:21:31 pm » |
|
Ciao io l'ho modificato così 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. 
|
|
|
|
|
Registrato
|
|
|
|
|
Ema90
|
 |
« 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: 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
Messaggi: 25
|
 |
« 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  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... #! /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 
|
|
|
|
|
Registrato
|
|
|
|
|
Morfeo
|
 |
« Risposta #12 inserita:: Gennaio 13, 2011, 12:45:06 pm » |
|
..uhm  mi potreste spiegare come e dove utilizzare questo xml ? mi piacerebbe imparare ad utilizzarlo  
|
|
|
|
|
Registrato
|
./configure make make install
|
|
|
|
Ema90
|
 |
« 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
Messaggi: 25
|
 |
« 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
|
|
|
|
|