2010-10-29 13 views
0

J'utilise cette classe pour télécharger des images sur mon serveur. Le problème est que lorsque je télécharge des images png transparentes, les parties transparentes deviennent noires. Y at-il un moyen de garder la transparence dans les images png?Correction d'un problème de transparence PNG

class SimpleImage { 

    var $image; 
    var $image_type; 

    function load($filename) { 
     $image_info = getimagesize($filename); 
     $this->image_type = $image_info[2]; 
     if($this->image_type == IMAGETYPE_JPEG) { 
     $this->image = imagecreatefromjpeg($filename); 
     } elseif($this->image_type == IMAGETYPE_GIF) { 
     $this->image = imagecreatefromgif($filename); 
     } elseif($this->image_type == IMAGETYPE_PNG) { 
     $this->image = imagecreatefrompng($filename); 
     } 

    } 
    function save($filename, $image_type=IMAGETYPE_JPEG, $compression=100, $permissions=null) { 
     if($image_type == IMAGETYPE_JPEG) { 
     imagejpeg($this->image,$filename,$compression); 
     } elseif($image_type == IMAGETYPE_GIF) { 
     imagegif($this->image,$filename);   
     } elseif($image_type == IMAGETYPE_PNG) { 
     imagepng($this->image,$filename); 
     } 
     if($permissions != null) { 
     chmod($filename,$permissions); 
     } 
    } 
    function output($image_type=IMAGETYPE_JPEG) { 
     if($image_type == IMAGETYPE_JPEG) { 
     imagejpeg($this->image); 
     } elseif($image_type == IMAGETYPE_GIF) { 
     imagegif($this->image);   
     } elseif($image_type == IMAGETYPE_PNG) { 
     imagepng($this->image); 
     } 
    } 
    function getWidth() { 
     return imagesx($this->image); 
    } 
    function getHeight() { 
     return imagesy($this->image); 
    } 
    function resizeToHeight($height) { 
     $ratio = $height/$this->getHeight(); 
     $width = $this->getWidth() * $ratio; 
     $this->resize($width,$height); 
    } 
    function resizeToWidth($width) { 
     $ratio = $width/$this->getWidth(); 
     $height = $this->getheight() * $ratio; 
     $this->resize($width,$height); 
    } 
    function scale($scale) { 
     $width = $this->getWidth() * $scale/100; 
     $height = $this->getheight() * $scale/100; 
     $this->resize($width,$height); 
    } 
    function resize($width,$height) { 
     $new_image = imagecreatetruecolor($width, $height); 
     imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 

     $this->image = $new_image; 
    }  
} 
+1

Cela ressemble à ceci a déjà été répondu sur stackoverflow: http://stackoverflow.com/questions/279236/how-do-i-resize-pngs-with-transparency-in-php –

Répondre

0

Vous devrez peut-être utiliser imagealphablending($this->image, false); imagesavealpha($this->image, true); avant imagepng

1

J'utilise celui-ci pour RAMAIN la transparence d'une image png ou gif.

imagecolortransparent($this->imageResized, imagecolorallocatealpha($this->imageResized, 0, 0, 0, 127)); 
imagealphablending($this->imageResized, false); 
imagesavealpha($this->imageResized, true); 
+1

merci pour l'édition @Juan Mellado –