Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Aran
    Registrato dal
    Nov 2002
    Messaggi
    1,529

    GD libraries e gif che scolorano

    Ciao a tutti!

    Ho un problema a cui non riesco venir a capo.
    Utilizzo una semplice classe php per l'upload e il ridimensionamento delle foto, quando carico una jpg tutto va perfettamente, mentre quando carico una gif mi modifica i colori, lo si vede perchè il bianco non è più bianco ma viene modificato leggermente.

    Avete qualche idea di cosa sia il problema? vi è mai capitato?
    Vi allego la classe che utilizzo.


    Grazie a tutti in anticipo


    codice:
    class uploadPhoto{
    	
    	private $tempimg,
    			$max_size,
    			$path,
    			$prename,
    			$crop;
    	
    		
    	public function imgMaker($tempimg,$max_size,$path,$prename,$crop){
    		//check if is empty
    
    		if($_FILES[$tempimg]['name']!=""){
    			
    			ob_start();
    			
    			//find  name and type
    			$uploadedfile = $_FILES[$tempimg]['tmp_name'];
    			
    			list($width,$height,$image_type)=getimagesize($uploadedfile);
    			
    			switch($image_type){
    				case 1:
    					$src = imagecreatefromgif($uploadedfile);
    				break;
    				case 2:
    					$src = imagecreatefromjpeg($uploadedfile);
    				break;
    				case 3:
    					$src = imagecreatefrompng($uploadedfile);
    				break;
    				default:
    					return '';
    				break;		
    			}
    			
    			//for png and gif image that maintein the alpha
    			if(($image_type == 1) || ($image_type==3)){
    				imagealphablending($tmp, false);
    				imagesavealpha($tmp,true);
    				$transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127);
    				imagefilledrectangle($tmp, 0, 0, $newwidth, $newheight, $transparent);
    			}
    			
    			// resize and crop for litle image
    			if($crop==1){
    				
    				if($width>$height){
    				
    					$y_pos = ($width-$height ) / 2;  
    					$y_pos = ceil($y_pos);  
    					
    					$newheight=$max_size;
    					$newwidth=($width/$height)*$newheight;
    					$tmp=imagecreatetruecolor($newwidth,$newheight);
    					$tmp=imagecreatetruecolor($max_size,$newheight);
    					imagecopyresampled($tmp,$src,0,0,$y_pos,0,$newwidth,$newheight,$width,$height);
    					
    				} else {
    					
    					$x_pos = ($height-$width) / 2;  
    					$x_pos = ceil($x_pos);  
    	
    					$newwidth=$max_size;
    					$newheight=($height/$width)*$newwidth;
    					$tmp=imagecreatetruecolor($newwidth,$newheight);
    					$tmp=imagecreatetruecolor($newwidth,$max_size);
    					imagecopyresampled($tmp,$src,0,0,0,$x_pos,$newwidth,$newheight,$width,$height);
    				
    				}
    				
    				
    			}else{
    				
    					$newwidth=$max_size;
    					$newheight=($height/$width)*$newwidth;
    					$tmp=imagecreatetruecolor($newwidth,$newheight);
    			
    				
    				imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
    			}
    	
    			
    			$nome_file=$_FILES[$tempimg]['name'];
    			$tipo = strtolower(substr($nome_file, strrpos($nome_file, "."), strlen($nome_file)-strrpos($nome_file, ".")));
    			$nameImg=md5($nome_file.rand()).$tipo;
    			//$nameImg=uniqid(23,false).$tipo;
    			
    			if($prename){
    				$nameImg=$prename.$nameImg;
    			}
    			
    			$filename = $path.$nameImg;
    	
    			switch ($image_type){
    				case 1:
    					imagegif($tmp,$filename);
    				break;
    				case 2:
    					imagejpeg($tmp,$filename,100);
    				break; // best quality
    				case 3:
    					imagepng($tmp,$filename,0);
    				break; // no compression
    				default:
    					return '';
    				break;
    			}
    			
    			imagedestroy($src);
    			imagedestroy($tmp);
    		
    			//ob_clean();
    			return $nameImg;
    		}
    	}
    }
    Mi diceva sempre: "Mai mangiare a stomaco vuoto..."

    Frank Cianuro - Aeroplane - Aran Blog - No Spez la Catena.

  2. #2
    La parte che interessa te è questa:
    Codice PHP:
    //for png and gif image that maintein the alpha
                
    if(($image_type == 1) || ($image_type==3)){
                    
    imagealphablending($tmpfalse);
                    
    imagesavealpha($tmp,true);
                    
    $transparent imagecolorallocatealpha($tmp255255255127);
                    
    imagefilledrectangle($tmp00$newwidth$newheight$transparent); 
    però è strano, quel codice in teoria mantiene la trasparenza, quindi dovrebbe essere come la uppi.

  3. #3
    Utente di HTML.it L'avatar di Aran
    Registrato dal
    Nov 2002
    Messaggi
    1,529
    Ciao e grazie per aver risposto!

    Guarda queste sono le 2 immagini a confronto, prima normale come l'ho fatta poi l'altra dopo il caricamento.

    Come noterai, oppure fai un controllo con qualche color piker il bianco è stato modificato.
    Non so che succede
    Immagini allegate Immagini allegate
    Mi diceva sempre: "Mai mangiare a stomaco vuoto..."

    Frank Cianuro - Aeroplane - Aran Blog - No Spez la Catena.

  4. #4
    prova a commentare queste 2 righe di codice:

    Codice PHP:
                   $transparent imagecolorallocatealpha($tmp255255255127);
                
    imagefilledrectangle($tmp00$newwidth$newheight$transparent); 

  5. #5
    Ciao, dato che questa classe mi torna utile, potresti spiegarmi cosa sono i parametri che passi?
    grazie

    Codice PHP:
    public function imgMaker($tempimg,$max_size,$path,$prename,$crop){ 

  6. #6
    Utente di HTML.it L'avatar di Aran
    Registrato dal
    Nov 2002
    Messaggi
    1,529
    Ciao,

    public function imgMaker($tempimg,$max_size,$path,$prename,$crop)

    $tempimg. nome del campo FILE del form
    $max_size. larghezza che dovrà avere l'immagine
    $path. cartella di destinazione dell'immagine
    $prename. se desideri che vengano messi dei caratteri prima del nome del file creato (ad esempio th_ per le thumnails)
    $crop. se 1 l'iimagine viene ritagliata in un quadrato, altrimenti viene solo ridimensionata.




    DKiller92, ho provato ma se carico una gif i colori vengono sempre leggermente virati
    Mi diceva sempre: "Mai mangiare a stomaco vuoto..."

    Frank Cianuro - Aeroplane - Aran Blog - No Spez la Catena.

  7. #7
    Ciao,
    qui
    Codice PHP:
    if(($image_type == 1) || ($image_type==3)){
                    
    imagealphablending($tmpfalse);
                    
    imagesavealpha($tmp,true);
                    
    $transparent imagecolorallocatealpha($tmp255255255127);
                    
    imagefilledrectangle($tmp00$newwidth$newheight$transparent);
                } 
    fai riferimento a $tmp, che però non hai ancora inizializzato.
    Codice PHP:
    $tmp=imagecreatetruecolor(... 
    è presente solo successivamente, quando verifichi la necessità o meno di fare di crop/resize

    Tra l'altro, è ripetuto in successione, sovrascrivendo la variabile:
    Codice PHP:
    ...
    $tmp=imagecreatetruecolor($newwidth,$newheight);
    $tmp=imagecreatetruecolor($max_size,$newheight);

    ...
                        
    $tmp=imagecreatetruecolor($newwidth,$newheight);
    $tmp=imagecreatetruecolor($newwidth,$max_size);
    ... 
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  8. #8
    Originariamente inviato da Aran
    Ciao,

    public function imgMaker($tempimg,$max_size,$path,$prename,$crop)

    $tempimg. nome del campo FILE del form
    $max_size. larghezza che dovrà avere l'immagine
    $path. cartella di destinazione dell'immagine
    $prename. se desideri che vengano messi dei caratteri prima del nome del file creato (ad esempio th_ per le thumnails)
    $crop. se 1 l'iimagine viene ritagliata in un quadrato, altrimenti viene solo ridimensionata.

    Grazie mille

  9. #9
    ma a te crea la trasparenza delle png/gif?

    me mette uno sfondo nero

  10. #10
    Utente di HTML.it L'avatar di Aran
    Registrato dal
    Nov 2002
    Messaggi
    1,529
    @Magicale

    Si quello è sicuramente da correggere, però cmq non incide sul fatto che i colori vengono modificati

    E' mai capitato a voi?!
    Mi diceva sempre: "Mai mangiare a stomaco vuoto..."

    Frank Cianuro - Aeroplane - Aran Blog - No Spez la Catena.

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.