• User Attivo

    Funzione per ridimensionare immagine PHP funzionante...PERFETTIBILE?

    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. 😄

    [PHP]
    function carica_immagine($file,$nome_file,$dim_file,$nuovo_nome,$nuova_dir,$larghezza_max,$altezza_max){
    $temp="62.149.140.52/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 é 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

    [/PHP]