Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    upload e ridimensionamento, sfondo nero png

    Ciao vi chiedo aiuto per un piccolo quesito che mi sta facendo impazzine, in pratica ho questa classe che permette il ridimensionamento di un'immagine (jpeg, gif, png ) tramite upload da un form, ma il punto è che al caricamento di una png/gif con sfondo trasmarente, mi salva tutto con sfondo nero, non mi tiene le trasparenze, come posso ovviare a questo problema e ridimensionare comunque le mie immagini?

    ecco la classe

    Codice PHP:

    class resize{    
        var 
    $urlimage "";
        var 
    $maxX 100;
        var 
    $maxY 100;
        var 
    $fisso 1;
        var 
    $latofisso "XY";
        var 
    $folder "public/";
        var 
    $newName "";
        
        
        
        function 
    controlladati(){
            
    $this->errore = array();
            
    $this->Estensione "";
            
    $this->originalX 0;
            
    $this->originalY 0;
            
    $this->originalName "";
            
    $this->newX 0;
            
    $this->newY 0;
            
            if(
    $this->urlimage==""){
                
    array_push($this->errore,"Scegliere un file da ridimensionare");
            }elseif(!
    file_exists($this->urlimage) || !is_file($this->urlimage)){
                
    array_push($this->errore,"Il file selezionato non esiste");
            }
            if(!
    is_numeric($this->maxX) || !is_numeric($this->maxY) || $this->maxX<|| $this->maxY<0){
                
    array_push($this->errore,"L'altezza e la larghezza dell'immagine devono essere numerici");
            }
            if(!
    file_exists($this->folder) || !chmod($this->folder,0777)){
                
    array_push($this->errore,"La cartella di destinazione non esiste o non è scrivibile");
            }
            if(
    $this->fisso!=&& $this->fisso!=1){
                
    array_push($this->errore,"La variabile di dimensione fissa deve essere 0 o 1");
            }
            if(
    $this->latofisso!="XY" && $this->latofisso!="X" && $this->latofisso!="Y"){
                
    array_push($this->errore,"La variabile di lato fisso devono essere X o Y o XY");
            }
            if(
    count($this->errore)>0){
                return 
    false;
            }else{
                return 
    true;
            }
        }
        
        function 
    go(){
            if(
    $this->controlladati()){
                
    $filename basename($this->urlimage);
                
    $this->originalName $filename;
                if(
    $this->newName==""){$this->newName=$filename;}
                
    $this->Estensione strtolower(substr($filenamestrrpos($filename"."), strlen($filename)-strrpos($filename".")));
                if(
    $this->Estensione==".jpeg" || $this->Estensione==".jpg"){
                    
    $handle_immagine imagecreatefromjpeg($this->urlimage);
                }elseif(
    $this->Estensione==".gif"){
                    
    $handle_immagine imagecreatefromgif($this->urlimage);
                }elseif(
    $this->Estensione==".png"){
                    
    $handle_immagine imagecreatefrompng($this->urlimage);
                }else{
                    
    array_push($this->errore,"Formato immagine non valido");
                    return 
    null;
                }
                
    $handle_immagine_adattata=$this->adatta($handle_immagine);
                
    imagejpeg($handle_immagine_adattata$this->folder.$this->newName80);
                
    chmod($this->folder.$this->newName,0777);
                unset(
    $handle_immagine);
                unset(
    $handle_immagine_adattata);
            }
        }
        
        function 
    adatta($handle_immagine){
            
    $this->originalX=imagesx($handle_immagine);
            
    $this->originalY=imagesy($handle_immagine);
            if(
    $this->fisso==1){
                
    $this->newX=$this->maxX;
                
    $this->newY=$this->maxY;
            }else{
                if(
    $this->latofisso=="XY"){
                    if (
    $this->originalX/$this->originalY>$this->maxX/$this->maxY) {
                        
    $this->newX=$this->maxX;
                        
    $this->newY=($this->originalY/$this->originalX)*$this->maxX;
                    } else {
                        
    $this->newX=($this->originalX/$this->originalY)*$this->maxY;
                        
    $this->newY=$this->maxY;
                    }
                }elseif(
    $this->latofisso=="X"){
                    
    $this->newX=$this->maxX;
                    
    $this->newY=($this->originalY/$this->originalX)*$this->maxX;
                }elseif(
    $this->latofisso=="Y"){
                    
    $this->newX=($this->originalX/$this->originalY)*$this->maxY;
                    
    $this->newY=$this->maxY;
                }else{
                    if (
    $this->originalX/$this->originalY>$this->maxX/$this->maxY) {
                        
    $this->newX=$this->maxX;
                        
    $this->newY=($this->originalY/$this->originalX)*$this->maxX;
                    } else {
                        
    $this->newX=($this->originalX/$this->originalY)*$this->maxY;
                        
    $this->newY=$this->maxY;
                    }
                }
            }
            
    $tmp_immagine imagecreatetruecolor($this->newX$this->newY);
            
    $handle_immagine_adattata imagecopyresampled($tmp_immagine$handle_immagine0000$this->newX$this->newY$this->originalX$this->originalY);
            return 
    $tmp_immagine;
            
        }



    si avvia con questa funzione

    Codice PHP:

    function resizeImage($dir$filename){        
    $resize = new resize;
    $resize->urlimage $dir;
    $resize->fisso 0;
    $resize->maxX 100;
    $resize->maxY 100;
    $resize->latofisso "X";
    $resize->folder "../../img/thumb/";
    $resize->newName "thumb-$filename";
    $resize->go();

    if(
    count($resize->errore)==0){
        
    $thumbImage $resize->newName;
    }else{
        echo 
    implode("<br>"$resize->errore); 
    }


  2. #2
    Apprezzo lo sforzo, ma perché non usi una classe già pronta che sfrutta la libreria GD ed elimini tutte quelle righe di codice?

    http://www.abeautifulsite.net/blog/2...class-for-php/


    Guarda che può fare:

    codice:
    $img = new SimpleImage('image.jpg');
    $img->flip('x')->rotate(90)->best_fit(320, 200)->sepia()->save('result.gif');

    Molto semplice da utilizzare giusto? Inoltre, ridurre le righe di codice ti aiuta a semplificare il debugging e magari anche a risolvere il tuo problema.

    Alberto
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  3. #3
    Quote Originariamente inviata da Albertorrr Visualizza il messaggio
    Apprezzo lo sforzo, ma perché non usi una classe già pronta che sfrutta la libreria GD ed elimini tutte quelle righe di codice?

    http://www.abeautifulsite.net/blog/2...class-for-php/


    Guarda che può fare:

    codice:
    $img = new SimpleImage('image.jpg');
    $img->flip('x')->rotate(90)->best_fit(320, 200)->sepia()->save('result.gif');

    Molto semplice da utilizzare giusto? Inoltre, ridurre le righe di codice ti aiuta a semplificare il debugging e magari anche a risolvere il tuo problema.

    Alberto
    ho inserito questo script, ma anche se è ben collegato sicuro al 100% eseguendo semplicemente questa funzione

    $img = new SimpleImage($file_name); $img->fit_to_width(300);$img->save($file_name, 100);

    mi riporta questo errore

    Class 'SimpleImage' not found in /www/......./upload.php on line 613

    come mai non trova la classe se pur è ben collegata?

  4. #4
    Quando crei l'oggetto metti anche il namespace prima del nome della classe.
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  5. #5
    Quote Originariamente inviata da Albertorrr Visualizza il messaggio
    Quando crei l'oggetto metti anche il namespace prima del nome della classe.
    perfetto una classe perfetto salva lo sfondo trasparente,
    ma ecco come l'ho dovuta far funzionare nel mio caso

    $img = new SimpleImage;
    $img->load("$desired_dir/".$file_name);
    $img->fit_to_width(300);
    $img->save("../../img/thumb/thumb-".$file_name, 100);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.