PHP per ridurre automaticamente file JPG

supernuz

Nuovo Utente
10 Ott 2012
9
0
0
Ciao a tutti,

cerco il modo per avere un PHP che riduce i file di una cartella "da_ridurre" ad 640x480 e li salva nella cartella "immagini" (tutto in locale).
Auesto PHP sarebbe la soluzione ideale.

Chi mi aiuta?

PS: Grande "borgo italia", moderatore NUMBER ONE!!! ;)
 
ciao
prova questo, è un ruadattamento di uno script che avevo fatto per un altro utente.
la carichi e gli dai il nome che vuoi e poi lo lanci.
verifica di avere le due cartelle "da_ridurre/" e "immagini/".
non ho messo alcuni controlli, ma penso che tu non ti voglia divertire a mandarti tutto in pallino.
PHP:
<?php
/*
ATTENZIONE: 
1. verificare i kb dell'immagine originale (meglio sotto i 1000 kb) altrimenti è facile che php va hout memory
2. non verifica l'orientamento dell'immagine, quindi devi verificare tu che l'immagine sia diritta
3. non cambia nome all'immagine e quindi se in destinazione esistente, sovrascive, per non sovrascivere da mod la riga rename
4. funziona solo per formato jpg
*/
function riduci_carica($nome_file){ 
	$cart_p="da_ridurre/";//cartella di partenza
	$cart_d="immagini/";//cartella di destinazione
    list($w_orig, $h_orig) = getimagesize($cart_p.$nome_file);//leggo larghezza e altezza dell immagine originale
	if($w_orig == 0 || $h_orig ==0){//se rileva 0 l'immagine non è trattabile
		echo "immagnine non compatibile <br />";
	}else{
    	$max_w = 640;//definisco le misure massime a cui voglio ridurre
		$max_h = 480; 
		$ratio = @min($max_w/$w_orig,$max_h/$h_orig);//cerco il rapporto minimo
    	if($ratio < 1 ){
			$w_rid = (int)($w_orig*$ratio); //calcolo le dimensioni a cui ridurre
			$h_rid  =(int)($h_orig*$ratio);
    		$tn = imagecreatetruecolor($w_rid, $h_rid); 
    		$image = imagecreatefromjpeg($cart_p.$nome_file); 
    		imagecopyresampled($tn, $image, 0, 0, 0, 0, $w_rid, $h_rid , $w_orig, $h_orig); 
    		imagejpeg($tn, $cart_d.$nome_file, 90);
		}
		echo "trattato: $nome_file<br>";
		@rename($cart_p.$nome_file, $cart_d.$nome_file);// sposta nella cartella di destinazione (attenzione sovrascrive se esiste)
		//per svuotare la cartella di partenza in automatico dei file trattat (altrimenti commentare la riga)
		@unlink($cart_p.$nome_file);
	}
}//fine function riduci_ricarica 
//**************************************
$imm_da_spost=array_merge(glob("da_ridurre/*.jpg"),glob("da_ridurre/*.JPG"));//legge i file da cartella di partenza
foreach($imm_da_spost as $immagine){
	$immagine=basename($immagine);
	riduci_carica($immagine);
}
echo "fatto";
?>
se ci sono problemi, posta
 
Ciao borgo italia,

grazie. Ho provato ma non funziona. Mi sposta i file da una cartella all'altra ma non li ridimensione.
 
ciao
ho ritestato, ma a me funzia
mi riduce le immagini di "da_ridurre" (1280x960) a "immagini" (640x480) e le cancella da "da_ridurre".
per prova in "da_ridurre" ho messo anche una da 400x300 e quella rimane tale e quale
comunque mi sono accorto che conviene mettere all'inizio dello script l'istruzione ini_set
PHP:
<?php
ini_set('memory_limit', '100M');//aggiungi questa riga
/*
ATTENZIONE: ......
*/
?>
questo ti permette di ridurre immagini più grandi. fai una prova e sappimi dire
eventualmente ti riposto lo script
 
Niente da fare. le ho provate tutte. File diversi, con estensione sia JPG che jpg, foto o immagini di tutte le risoluzioni. Non le modifica.
Il codice è questo:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<?php 
ini_set('memory_limit', '100M');//aggiungi questa riga 
/* 
ATTENZIONE:  
1. verificare i kb dell'immagine originale (meglio sotto i 1000 kb) altrimenti è facile che php va hout memory 
2. non verifica l'orientamento dell'immagine, quindi devi verificare tu che l'immagine sia diritta 
3. non cambia nome all'immagine e quindi se in destinazione esistente, sovrascive, per non sovrascivere da mod la riga rename 
4. funziona solo per formato jpg 
*/ 
function riduci_carica($nome_file){  
    $cart_p="da_ridurre/";//cartella di partenza 
    $cart_d="ridotte/";//cartella di destinazione 
    list($w_orig, $h_orig) = getimagesize($cart_p.$nome_file);//leggo larghezza e altezza dell immagine originale 
    if($w_orig == 0 || $h_orig ==0){//se rileva 0 l'immagine non è trattabile 
        echo "immagnine non compatibile <br />"; 
    }else{ 
        $max_w = 640;//definisco le misure massime a cui voglio ridurre 
        $max_h = 480;  
        $ratio = @min($max_w/$w_orig,$max_h/$h_orig);//cerco il rapporto minimo 
        if($ratio < 1 ){ 
            $w_rid = (int)($w_orig*$ratio); //calcolo le dimensioni a cui ridurre 
            $h_rid  =(int)($h_orig*$ratio); 
            $tn = imagecreatetruecolor($w_rid, $h_rid);  
            $image = imagecreatefromjpeg($cart_p.$nome_file);  
            imagecopyresampled($tn, $image, 0, 0, 0, 0, $w_rid, $h_rid , $w_orig, $h_orig);  
            imagejpeg($tn, $cart_d.$nome_file, 90); 
        } 
        echo "trattato: $nome_file<br>"; 
        @rename($cart_p.$nome_file, $cart_d.$nome_file);// sposta nella cartella di destinazione (attenzione sovrascrive se esiste) 
        //per svuotare la cartella di partenza in automatico dei file trattat (altrimenti commentare la riga) 
        @unlink($cart_p.$nome_file); 
    } 
}//fine function riduci_ricarica  
//************************************** 
$imm_da_spost=array_merge(glob("da_ridurre/*.jpg"),glob("da_ridurre/*.JPG"));//legge i file da cartella di partenza 
foreach($imm_da_spost as $immagine){ 
    $immagine=basename($immagine); 
    riduci_carica($immagine); 
} 
echo "fatto"; 
?> 
</head>

<body>
</body>
</html>

Ho solo modificato la cartella di destinazione ma non cambia. Devo aver installato qualche cosa di specifico?
Uso XP.

Carlo.
 
cioa
ho fatto il copia/incolla dello script che mi hai postato e a me funzia perfettamente.
verifica di aver scritto giusto i nomi delle tue cartelle. se controlli le immagini con lo slide che hai, verifica anche li di aver messo giusto i nomi che non vada a pescarti le immagini da un'altra parte (es nella vecchia cartella immagini).
anch'io uso il vecchio xp
 

Discussioni simili