Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    131

    Ridimensionamento Immagine PNG Sfondo Trasparente

    Salve a tutti.
    Con questo codice ridimensiono le immagini:

    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<0 || $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!=0 && $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($filename, strrpos($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->newName, 80);
    			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_immagine, 0, 0, 0, 0, $this->newX, $this->newY, $this->originalX, $this->originalY);
        
    		return $tmp_immagine;
        
    	}
    
    
    }
    ?>
    Vi è un problema, se l'immagine ha la trasparenza, lo script attribuisce allo sfondo il colore nero, come posso risolvere?
    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    Per mantenere la trasparenza devi usare anche le funzioni che gestiscono il canale alpha, da un'occhiata qui.
    eXvision

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Poco più sotto c'è una discussione simile, anche se chi l'ha aperta dice di non aver risolto, comunque per manipolare le immagini trasparenti devi usare anche le funzioni che gestiscono il canale alpha.
    Prova a leggere qui.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    131
    Cambiando le ultime righe con questo codice:

    codice:
        imagecolortransparent($newImage, imagecolorallocatealpha($newImage, 0, 0, 0, 127));
      imagealphablending($newImage, false);
      imagesavealpha($newImage, true);
      
      imagecopyresampled($newImage,$handle_immagine,0,0,0,0, $this->newX, $this->newY, $this->originalX, $this->originalY);
    L'immagine diventa trasparente, però non viene più ridimensionata

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.