PDA

View Full Version : [PHP] Funzione per ridimensionare immagine funzionante...PERFETTIBILE?


zUmBo!
12-09-2007, 12:39
Ciao a tutti,
è da un po' di tempo che ho creato una funzione per caricare e ridimensionare immagini su server con PHP.

innanzitutto, la metto a disposizione di tutti in quanto è perfettamente funzionante.

Secondariamente vi chiedo: secondo voi è perfettibile?
mi spiego meglio:

ho notato che questa funzione occupa molta memoria su server e se aggiungo immagini più grandi di 150 k si blocca tutto con un fatal error (una cosa del tipo: allowed memory size exceeded, tried to allocate 12032212 kb.....)

Qualcuno di voi sa come perfezionarla?

grazie, ciao. :D


function carica_immagine($file,$nome_file,$dim_file,$nuovo_nome,$nuova_dir,$larghezza_max,$altezza_max){
$temp="100.100.100.100/tmp/";
if(!is_dir("/web/htdocs/www.miaroot.com/home/hf/newsletter/shared/$nuova_dir")){
if(!mkdir("/web/htdocs/www.miaroot.com/home/hf/newsletter/shared/$nuova_dir")){
echo "si é verificato un errore si prega riprovare";
}
}
$destinazione="/web/htdocs/www.miaroot.com/home/hf/newsletter/shared/$nuova_dir";
if (!$nome_file){$this->messaggio_ima.="<BR>errore foto non trovata";$this->invia="no";}
$this->controllo=substr($nome_file, -4);
$lunghezza=strlen($this->controllo);
if (!preg_match("/.jpg/i",$this->controllo)){
$this->invia="no";
$this->messaggio_ima.="<BR>attenzione l'estensione del file non &eacute; corretta nome foto:$nome_file controllo:$this->controllo lunghezza=$lunghezza";
}//chiusura controllo estensione
//if($dim_file>102400){ se max 100kb
//max 150kb
if($dim_file>153600){
$this->invia="no";
$this->messaggio_ima.="<BR>attenzione si possono caricare file di massimo 150kb, il file che si é tentato di uploadare è troppo grande.<br>
si prega ridimensionarlo e riprovare";
}
if ($this->invia!=="no"){
if (is_uploaded_file($file)){
$dimensioni=getimagesize($file);
$larghezza_originale=$dimensioni[0];
$altezza_originale=$dimensioni[1];
if(($larghezza_originale>$altezza_originale)||($larghezza_originale==$altezza_originale)){
if ($larghezza_originale > $larghezza_max) {
$altezza = ($larghezza_max / $larghezza_originale) * $altezza_originale;
$larghezza = $larghezza_max;
$ridimensionato="si";
}//controllo larghezza
if (($altezza_originale > $altezza_max)&&($ridimensionato!=="si")) {
$larghezza = ($altezza_max / $altezza_originale) * $larghezza_originale;
$altezza = $altezza_max;
$ridimensionato="si";
} //controllo altezza
}//controllo rettangolo orizzontale
if ($larghezza_originale<$altezza_originale){
if ($ridimensionato!=="si"){
if ($larghezza_originale > $larghezza_max) {
$altezza = ($larghezza_max / $larghezza_originale) * $altezza_originale;
$larghezza = $larghezza_max;
$ridimensionato="si";
}//controllo larghezza
if ($altezza_originale > $altezza_max) {
$larghezza = ($altezza_max / $altezza_originale) * $larghezza_originale;
$altezza = $altezza_max;
$ridimensionato="si";
} //controllo altezza
} //controllo rettangolo orizzontale
} //controllo ridimensionato
if ($ridimensionato!=="si"){
$altezza=$altezza_originale;
$larghezza=$larghezza_originale;
}

unset($ridimensionato);

$image_p = imagecreatetruecolor($larghezza, $altezza);

$image=imagecreatefromjpeg($file);


imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$larghezza, $altezza, $larghezza_originale, $altezza_originale);

imagejpeg($image_p,$destinazione."/".$nuovo_nome.".jpg",75);

return true;
}else{
return false;
$this->invia="no";
$this->messaggio_ima.="<BR>errore nell'invio dell'immagine, si prega di riprovare";
}//chiusura controllo file esistente
}//chiusura controllo invio
}//fine funzione immagine

cionci
12-09-2007, 15:02
Sicuramente un po' di indentazione non gli farebbe male :D

PS: sei sicuro di vole mantenere visibile la stringa assegnata a temp ?

zUmBo!
12-09-2007, 15:07
Sicuramente un po' di indentazione non gli farebbe male :D

PS: sei sicuro di vole mantenere visibile la stringa assegnata a temp ?

aaaaaa....caavvolo, grazie mille :doh: