catturare e rinominare jpg

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Ciao a tutti.
avrei bisogno di un aiuto per realizzare uno slideshow, il problema è che sul mio sito carico ogni 5 minuti una fotografia che ha sempre lo stesso nome (webcam.jpg) ed al momento non posso fare diversamente.
Quindi avrei bisogno di catturare automaticamente ogni 30 minuti la fotografia webcam.jpg, rinominarla in maniera sequenziale (es. 1.jpg, 2.jpg ecc) e salvarla in una cartella chiamata "oggi".
Inoltre alle 00.01 di ogni giorno il contenuto della cartella "oggi" dovrebbe essere spostata in una cartella chiamata "ieri" sovvrascrivendo le foto esistenti.
Spero di non chiedere troppo :angel:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
potresti fare così
carichi in una cartella es. chiamata temporanea la foto webcam.jpg
PHP:
<?php
//.....
$adesso=time();
$nuovo_nome="oggi/".$adesso.".jpg";//non so i tuoi percorsi come sono
//sposti nella cartella oggi
if(move_uploaded_file("temporanea/webcam.jpg",$nuovo_nome)){
	echo "foto caricata con successo";
}else{
	echo "errore";
}
$mezzanotte=date("h:i");//ritorna a mezzanotte 00:00 dopo un minuto 00:01
if($mezzanotte=="00:01"){
	//leggi le immagini nelle due cartelle oggi e ieri
	$ieri=glob("ieri/*.jpg");
	$oggi=glob("oggi/*.jpg");
	//elimini le vecchie in ieri vuotando la cartella
	foreach($ieri as $valore){
		unlink("ieri/$valore");
	}
	//e sposti da oggi a ieri
	foreach($oggi as $valore){
		move_uploaded_file("oggi/$valore","ieri/$valore");
	}
}
//.........
?>
guarda che però:
- è solo un'idea comunque da provare e perfezionare
- devi lanciare ogni volta lo script, altrimenti devi ricorre a qualche croonjobs
 
Ultima modifica:

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Grazie per la risposta velocissima.
Penso sia la strada giusta ;)
Il percorso della foto è: webcamwrt160/wrt160.jpg
Se non ho capito male il tuo script rinomina la foto con l'ora e va bene lo stesso.
Ho fatto un paio di prove ma non riesco a copiare wrt160.jpg rinominata in "oggi", dove sbaglio?

PHP:
<?php
//.....
$adesso=time();
$nuovo_nome="webcamwrt160/".$adesso.".jpg";//non so i tuoi percorsi come sono
//sposti nella cartella oggi
if(move_uploaded_file("webcamwrt160/wrt160.jpg",$nuovo_nome)){
echo "foto caricata con successo";
}else{
echo "errore";
}
$mezzanotte=date("h:i");//ritorna a mezzanotte 00:00 dopo un minuto 00:01
if($mezzanotte=="00:01"){
//leggi le immagini nelle due cartelle oggi e ieri
$ieri=glob("webcamwrt160/ieri/*.jpg");
$oggi=glob("webcamwrt160/oggi/*.jpg");
//elimini le vecchie in ieri vuotando la cartella
foreach($ieri as $valore){
unlink("ieri/$valore");
}
//e sposti da oggi a ieri
foreach($oggi as $valore){
move_uploaded_file("oggi/$valore","ieri/$valore");
}
}
//.........
?>

Inoltre non capisco a cosa serve una cartella "temporanea" infatti la foto è già caricata nel percorso che ti ho detto prima (webcamwrt160/wrt160.jpg), non è sufficente spostarla in "oggi" rinominandola?
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
l'ho chiamata temporanea perchè non sapevo dove veniva caricata l'immagine wrt160.jpg
comunque da quello che ho capito
1. l'immagine wrt160.jpg si carica nella cartella webcamwrt160
2. da qui la devi spstare (rinominata) nella cartella oggi. la cartella oggi è una sottocartella di webcamwrt160 (giusto?)
3. anche la cartella ieri è una sottocartella di webcamwrt160?
se è cosi ti rimetto a posto lo script

dimenticavo:
lo script che deve rinominare dove risiede, dentro webcamwrt160? o al suo esterno? perche i percorsi devono essere fatti in base a dove risiede lo script
 
Ultima modifica:

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Gentilissimo !!!
1 - l'immagine wrt160.jpg si carica nella cartella webcamwrt160, e la utilizzo già per pubblicare la webcam.
2 - Si, la dovrei catturarla ogni 30 minuti, rinominarla (1.jpg, 2.jpg......48.jpg) e mettere la foto rinominata in webcamwrt160/oggi lasciando invariata la wrt160.jpg originale.
3 - Si, anche la cartella "ieri" è dove dici te: webcamwrt160/ieri
4 - Lo script posso metterlo tranquillamente in: webcamwrt160/

Grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per numerarle come vuoi tu (1.jpg, 2.jpg) può diventare più difficilem ma usabdo time il valere di $adesso cambia ogni secondo quindi se lanci lo script ogni 30 minuti
il valore di time (è un numero intero di 12 cifre) si incrementa di 1800 (30 min * 6a sec) quindi non va a sovrascriverti le foto in oggi.
e per quello poi in ieri le elimino, perchè non ci sarà mai una foto che abbia lo stesso nome.
si puo fare anche come dici tu però quando carichi la prima foto devi
1. verificare che sia la prima (cioe oggi senza foto) dargli il nome 1.jpg e caricarla
2. quando carichi la/le successiva/e devi verificare quante foto ci sono di gia in oggi e incrementare il numero di uno
PHP:
<?php
//.....
/*
se lo script risiede nella cartella webcamwrt160 i percorsi sono quelli dello script sotto
se è esterno i percorsi diventano
"webcamwrt160/wrt160.jpg"
"webcamwrt160/oggi/".$adesso.".jpg";
"webcamwrt160/ieri/*.jpg"
"webcamwrt160/oggi/*.jpg"
ecc...
se e esterno ma in una sua cartella
"../webcamwrt160/wrt160.jpg"
"../webcamwrt160/oggi/".$adesso.".jpg";
ecc....
*/
$adesso=time();
$nuovo_nome="oggi/".$adesso.".jpg";
//sposti nella cartella oggi
if(move_uploaded_file("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi chiamandola (es) 123456789333.jpg
	echo "foto caricata con successo";
}else{
	echo "errore";// qui sta a te decidere cosa fare
}
$mezzanotte=date("h:i");//ritorna a mezzanotte, 00:00 dopo un minuto 00:01
if($mezzanotte=="00:01"){
	//leggi le immagini nelle due cartelle oggi e ieri
	$ieri=glob("ieri/*.jpg");//glob crea un array con il nome delle immagini
	$oggi=glob("oggi/*.jpg");//come puoi notare glob accetta le whilcard *
	//elimini le vecchie in ieri vuotando la cartella
	//anche qui sarebbe opportuno verificare per impedire eventuali errori con blocco dello script
	if(is_array($ieri)){//se non è un array vuol dire che la cartella ieri era vuota
		foreach($ieri as $valore){
			unlink("ieri/$valore");
		}
	}
	//e sposti da oggi a ieri
	//stesso controllo
	if(is_array($oggi)){
		foreach($oggi as $valore){
			move_uploaded_file("oggi/$valore","ieri/$valore");
		}
	}
}
//.........
?>
come gia detto pero ogni mezz'ora devi lanciare lo scrip manualmente
potresti risolvere lascando la pag sempre collegata e tramite js farla ricaricare ogni mezzora, oppure come detto usare un cron, ma per questo, risiedendo nel server, devi chidere al tuo provider
poi mi è venuto un dubbio sulla verifica di mezzanotte, appena l'ho risolto eventualmente te lo posto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco qua il dubbio ho fatto un "marchiano" errore di logica
se carichi una foto alle ore 00.00
$mezzanotte diventa 00:00
se a mezzazotte e mezzo ne carichi un'altra
$mezzanotte cambia il suo valore da 00:00 a 00:30
quindi la condizione $mezzanotte == 00:01 non è mai soddisfatta
devo riguardare il tutto
scusa, un po' di pazienza e riposto
 

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Scusa ma forse mi sono spiegato male.
L'indicazione mezzanotte è indicativa.
il wrt160.jpg originale viene aggiornato automaticamente ogni 5 minuti (upload via ftp da router collegado a webcam).
il php che stai creando deve catturare, rinominare e salvare questa foto ogni 30 minuti (vediamo dopo come per l'automatismo di partenza del php).
Supponiamo che io faccia partire il php ad indervalli di 30 minuti a partire dalle 00.15 otterrei quanto segue:
00.15 cattura immagine e salvataggio in "oggi" con nome 0.jpg
00.45 cattura immagine e salvataggio in "oggi" con nome 1.jpg
01.15 cattura immagine e salvataggio in "oggi" con nome 2.jpg ecc.
Se alle 00.05 di ogni giorno sposti e cancelli il contenuto di "oggi" in "ieri" non dovrebbero esserci problemi (almeno credo), infatti alle 00.15 verrebbe scritta la prima foto in "oggi con nome 0.jpg ed io per fare lo slide show punterei le immagini contenute in "oggi" ed "ieri"
Spero di essermi spiegato meglio, comunque rimango a disposizione ;)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco questo dovrebbe funzionare indipendentemente da quando carichi le immagini
ogni volta che carichi
1 prima muove l'imm rinominata in oggi
2 contenporaneamente verifica se ci sono in oggi immagini di ieri e se si le sposta in ieri
3 veifica in ieri e se ci sono imm vecchie le elimina
PHP:
<?php
//.....
$oggi=time();//legge il tempo in timestamp nel momento in cui carichi la foto
$ieri=$oggi-(24*60*60);
$ieri_altro=$oggi-(2*24*60*60);
//trasformo il timestamp
$oggi=date("d_his,$oggi");//$oggi diventa es. 24_194327 (giorno 24, ore 19, 43 min, 23 sec)
$nuovo_nome="oggi/".$oggi.".jpg";
//sposti nella cartella oggi
if(move_uploaded_file("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi chiamandola (es) 123456789333.jpg
	echo "foto caricata con successo";
}else{
	echo "errore";// qui sta a te decidere cosa fare
}
//leggi le immagini nelle due cartelle oggi e ieri
$imm_di_oggi=glob("oggi/*.jpg");//glob crea un array con il nome delle immagini
$imm_di_ieri=glob("ieri/*.jpg");
//trasformo anche il valore di $ieri ma solo il numero del giorno
$ieri=date("d",$ieri);
//verifichiamo che ci siano immagini in oggi
if(is_array($imm_di_oggi)){// se non è un array non ci sono immagini
	foreach($imm_di_oggi as $valore){
		//guardo che giorno o stata caricata l'immagine
		$gg=explode("_", $valore);
		if($gg[0]==$ieri){//l'immagine è stata caricata il giorno prima quindi devo spostarla
			move_uploaded_file("oggi/$valore","ieri/$valore");
		}
	}
}
//trasformo anche il valore di $ieri_altro ma solo il numero del giorno
$ieri_altro=date("d",$ieri_altro);
//verifichiamo che ci siano immagini in ieri
if(is_array($imm_di_ieri)){// se non è un array non ci sono immagini
	foreach($imm_di_ieri as $valore){
	//guardo che giorno o stata caricata l'immagine
	$gg=explode("_", $valore);
	if($gg[0]==$ieri_altro){
		unlink("ieri/$valore");
	}
}
?>
provalo e sappimi dire
 

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Grazie, purtroppo ora devo uscire ma provo domani mattina provo e ti faccio sapere.
A domani
 

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
contrordine, non devo uscire:)
Ho caricato lo script con nome new1.php in webcamwrt160/new1.php (stessa cartlella dove viene oggiornata wrt160.jpg).
Ho aspettato che la foto fosse caricata via ftp per un paio di volte ma la cartella webcamwrt160/oggi rimane vuota :( (logicamente rimane vuota anche webcamwrt160/ieri).
Ho provato anche a lanciare un paio di vote il php con explorer ma non cambia niente........
Per sicurezza ho anche verificato che lo script abbia i permessi a 777.
Comunque, se riusciamo a farlo funzionare, hai avuto un'ottima idea, io non avevo pensato ad usare l'ora di upload della foto per fare la cattura :fonzie:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se il l'immagine wrt160.jpg viene caricata in webcamwrt160 e ooi non viene rinominata e spostata in oggi i casi possono essere due
o il move-upload non funzia (problemi di permessi?) e allora dovrebbe darti l'avviso "errore"
o c'è qualcosa che non va nei percorsi e te la salva chissa dove
dai un occhio all'ultimo post del 3d http://forum.mrwebmaster.it/php/30334-file-upload-ridimensionamento.html, c'era un problema simile
comunque prova una cosa, metti var_dump e commenta provvisoriamente le righe dell'if-else
se non carica in oggi logicamente non puo caricare in ieri
PHP:
<?php
//.........
$nuovo_nome="oggi/".$oggi.".jpg";
var_dump($nuovo_nome);//dovrebbe restituirti string(xx) "oggi/25_090845.jpg" o simile
//sposti nella cartella oggi
var_dump(move_uploaded_file("wrt160.jpg",$nuovo_nome); //dovrebbe darti se non funzia bool (FALSE)
/*
if(move_uploaded_file("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi
    echo "foto caricata con successo";
}else{
    echo "errore";// qui sta a te decidere cosa fare
} 
*/
//.........
?>
poi dimmi cosa riportano

dimenticavo non lo script deve avere i permessi ma le cartelle
 
Ultima modifica:

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Scusa per il ritardo della risposta ma oggi il lavoro mi ha tenuto occupato.
Premetto che la cartella webcamwrt160 ha utti i permessi come del resto anche le sottocartelle "oggi" ed "ieri".
Lanciando il php (webcamwrt160/new1.php) con explorer ottengo il seguente errore:
Parse error: syntax error, unexpected $end in /var/www/miosito/webcamwrt160/new1.php on line 41
Sembra quasi manchi un pezzo di script, dove ho sbagliato ?
 

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Ho paura di non aver capito qualcosa.
Io ho copiato (paripari) lo script che hai creato in una nuova pagina di notepad++ e l'ho salvato come new1.php sul sito nella cartella webcamwrt160/ dove c'è la wrt160.jpg , ho creato anche webcamwrt160/oggi e webcamwrt160/ieri dando i permessi a cartelle e files (tutti a 777)
Ho provato a controllare la sintassi ma, visto la mia scarsa conoscenza di php, non ho torvato ninte di strano.
Potresti cortesemente ricontrollarmelo? Già che hai fatto tanto sarebbe bello vederlo funzionare ;).
Ciao
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
posta anche tutto lo script che hai fatto.
penso domani nel pomeriggio di poterci dare un occhio, ma spero soprattutto di risolvere
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco funzia, testato
mi ero dimenticato (il caldo) che glob restituisce come valore caretella/immagine.jpg, mentre a noi, per le verifiche, serve immagine.jpg
quindi ho aggiunto dove serve la funzione basename e fatto altre piccole modifiche (leggi i commenti)
e messo un paio di echo per seguire lo script (che se non ti servono) puoi togliere
PHP:
<?php
//.....
$oggi=time();//legge il tempo in timestamp nel momento in cui carichi la foto
$ieri=$oggi-(24*60*60);
$ieri_altro=$oggi-(2*24*60*60);
//trasformo il timestamp
$oggi=date("ymd_his",$oggi);//$oggi diventa es. 24_194327 (giorno 24, ore 19, 43 min, 23 sec)
$nuovo_nome="oggi/".$oggi.".jpg";
//sposti nella cartella oggi
if(file_exists("wrt160.jpg")){//messo perche se lanci lo script e non c'è wrt160.jpg da errore e si blocca al rename
	if(rename("wrt160.jpg",$nuovo_nome)){//sposta la wrt160.jpg in oggi chiamandola (es) 120625_082424.jpg
    	echo "foto spostata con successo";
	}else{
    	echo "errore";// qui sta a te decidere cosa fare
	}
}
//leggi le immagini nelle due cartelle oggi e ieri
$imm_di_oggi=glob("oggi/*.jpg");//glob crea un array con il nome delle immagini
$imm_di_ieri=glob("ieri/*.jpg");
//trasformo anche il valore di $ieri ma solo il numero del giorno
$ie=date("ymd",$ieri);
//verifichiamo che ci siano immagini in oggi
if(is_array($imm_di_oggi)){// se non è un array non ci sono immagini
	foreach($imm_di_oggi as $valore){
        $valore=basename($valore);//$valore era es. oggi/120625_082424.jpg con basename diventa 120625_082424.jpg
		//guardo che giorno o stata caricata l'immagine
        $gg=explode("_", $valore);
        if($gg[0] <= $ie){//l'immagine è stata caricata il giorno prima quindi devo spostarla
			rename("oggi/$valore","ieri/$valore");
			echo "spostato $valore da oggi a ieri";
        }
    }
}
//trasformo anche il valore di $ieri_altro ma solo il numero del giorno
$ieri_altro=date("ymd",$ieri_altro);
//verifichiamo che ci siano immagini in ieri
if(is_array($imm_di_ieri)){// se non è un array non ci sono immagini
    foreach($imm_di_ieri as $valore){
    	$valore=basename($valore);//vedi nota precedente
		//guardo che giorno o stata caricata l'immagine
    	$gg=explode("_", $valore);
    	if($gg[0]<=$ieri_altro){
        	unlink("ieri/$valore");
			echo "eliminato $valore da ieri";
    	}
	}
}
?>

ho caricato (dun paio di volte) un file wrt160.jpg
e ottenuto in oggi 120627_105046.jpg e 120627_111509.jpg
rinominato (per accelerare) 120627_111509.jpg in 120626_111509.jpg
e l'immagine 120626_111509.jpg si è spostata in ieri
rinominata 120626_111509.jpg in 120625_111509.jpg
e la 120625_111509.jpg è stata eliminata
poi ti spiego perchè ho aggiunto alle date ym
 
Ultima modifica:

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Semplicemente P E R F E T T O !!!
Ti ringrazio tantissimo, è proprio quello che mi serviva.
Testato da ieri e funziona perfettamente.
Ora posso procedere con lo slideshow :)
Ciao e grazie ancora
 

lucio1

Nuovo Utente
24 Giu 2012
14
0
0
Sono semlicemente delle fotografie panoramiche fatte da una webcam.
Mi piaceva l'idea di creare anche uno slideshow ed ora posso farlo ;)
Ciao
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [Javascript] Catturare l'evento click di un bottone Javascript 3
felino [ASP.Net] [VbScript] Catturare valore del Hard Faults (Page Fault) ASP.NET 0
S Catturare tag html con PHP PHP 5
felino [VBScript] Json: catturare un Value dato il suo Nome Visual Basic 1
M catturare link e inviare email PHP 41
P Catturare la schermata di un sito più grande dello schermo Webdesign e Grafica 7
E catturare pseudo-classi CSS con Javascript Javascript 1
D catturare dati nel template da view.html.php con js CMS (Content Management System) 0
G Programma catturare immagini animate da un videogioco Webdesign e Grafica 5
M Catturare istantanea da webcam Flash 0
D Catturare Un Blocco Di Testo Da Un'altra Pagina PHP 2
S Stamp-Catturare immagini con Flash...Problemone!! Flash 3
B Catturare una schermata Windows e Software 5
J catturare lo stream audio Programmazione 0
C Rinominare file in base all'id dell'utente loggato PHP 0
W Rinominare un file in PHP PHP 7
W Rinominare Documenti Con Form Asp Classic ASP 9
romeocharly [PHP] Script per rinominare in automatico le immagini inviate da ftp PHP 0
syndr0m3 [PHP] Rinominare file sul server ogni tot minuti PHP 8
M [PHP] Nome file, upload e rinominare PHP 2
S Rinominare progetto da Visual Studio Express 2013 Visual Basic 0
M rinominare file in upload PHP 3
M Rinominare filename immagine prima di fare l'upload PHP 2
xone Rinominare immagine upload PHP 3
Monital Rinominare le chiavi del multiarray dopo il suo ordinamento PHP 0
L Rinominare link PHP 10
M rinominare immagini con form asp Classic ASP 10
M Rinominare cartella con Cronjob PHP 8
helpdesk rinominare immagini PHP 38
fabriss76 Rinominare sito HTML e CSS 6
G Come rinominare pagina HTML mantenendo posizione? SEO e Posizionamento 0
M Rinominare file Classic ASP 3
L rinominare una pagina da htm ad asp Discussioni Varie 5
csi Inviare file jpg in locale alla stampante con php PHP 0
S poblema rendering foto jpg dompdf PHP 1
F Risoluzione in PNG o JPG Photoshop 2
max_400 [HTML] Come creare un jpg animata (non gif animata) HTML e CSS 3
G Caricare una jpg con il php PHP 1
G Caricare una semplice Jpg con il PHP PHP 1
gandalf1959 caricamento jpg in database mysql PHP 1
zorro [PHP] Conversione PDF-JPG PHP 6
R Javascript e html - estrazione EXIF da jpg con link per geolocalizzazione google maps Javascript 0
Z Salvare Form su un file .JPG Visual Basic 0
felino Recuperare i livelli (photoshop) da un file JPG Photoshop 5
S PHP per ridurre automaticamente file JPG PHP 7
P rollOver su testo cambia jpg Javascript 2
N errore visualizzazione allegato jpg PHP 6
matteoraggi Immagine .jpg che non si vede solo su internet explorer HTML e CSS 2
M Codifico in XHTML layout PSD, PNG, JPG... Altri Annunci 0
L Loop infinito JPG Flash 1

Discussioni simili