Jump to content
Sign in to follow this  
esec.rom

upload imagens png transparência em preto

Recommended Posts

esec.rom

tenho este codigo para fazer o upload de imagem, mas o problema que acontece é que em imagens png coloca a parte de transparência fica em preto.

ja procurei na net e encontrei alguma soluções mas nenhuma dela funcionou

<?php
Class resize {
   // *** Class variables
   private $image;
   private $width;
   private $height;
   private $imageResized;
   function __construct($fileName) {
    // *** Open up the file
    $this->image = $this->openImage($fileName);
    // *** Get width and height
    $this->width = imagesx($this->image);
    $this->height = imagesy($this->image);
   }
   ## --------------------------------------------------------
   private function openImage($file) {
    // *** Get extension
    $extension = strtolower(strrchr($file, '.'));
    switch ($extension) {
	    case '.jpg':
	    case '.jpeg':
		    $img = @imagecreatefromjpeg($file);
		    break;
	    case '.gif':
		    $img = @imagecreatefromgif($file);
		    break;
	    case '.png':
		    $img = @imagecreatefrompng($file);
		    break;
	    default:
		    $img = false;
		    break;
    }
    return $img;
   }
   ## --------------------------------------------------------
   public function resizeImage($newWidth, $newHeight, $option = "auto") {
    // *** Get optimal width and height - based on $option
    $optionArray = $this->getDimensions($newWidth, $newHeight, $option);
    $optimalWidth = $optionArray['optimalWidth'];
    $optimalHeight = $optionArray['optimalHeight'];

    // *** Resample - create image canvas of x, y size
    $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);


    imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);
    // *** if option is 'crop', then crop too
    if ($option == 'crop') {
	    $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
    }
   }
   ## --------------------------------------------------------
   private function getDimensions($newWidth, $newHeight, $option) {
    switch ($option) {
	    case 'exact':
		    $optimalWidth = $newWidth;
		    $optimalHeight = $newHeight;
		    break;
	    case 'portrait':
		    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
		    $optimalHeight = $newHeight;
		    break;
	    case 'landscape':
		    $optimalWidth = $newWidth;
		    $optimalHeight = $this->getSizeByFixedWidth($newWidth);
		    break;
	    case 'auto':
		    $optionArray = $this->getSizeByAuto($newWidth, $newHeight);
		    $optimalWidth = $optionArray['optimalWidth'];
		    $optimalHeight = $optionArray['optimalHeight'];
		    break;
	    case 'crop':
		    $optionArray = $this->getOptimalCrop($newWidth, $newHeight);
		    $optimalWidth = $optionArray['optimalWidth'];
		    $optimalHeight = $optionArray['optimalHeight'];
		    break;
    }
    return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
   }
   ## --------------------------------------------------------
   private function getSizeByFixedHeight($newHeight) {
    $ratio = $this->width / $this->height;
    $newWidth = $newHeight * $ratio;
    return $newWidth;
   }
   private function getSizeByFixedWidth($newWidth) {
    $ratio = $this->height / $this->width;
    $newHeight = $newWidth * $ratio;
    return $newHeight;
   }
   private function getSizeByAuto($newWidth, $newHeight) {
    if ($this->height < $this->width) {
    // *** Image to be resized is wider (landscape)
	    $optimalWidth = $newWidth;
	    $optimalHeight = $this->getSizeByFixedWidth($newWidth);
    } elseif ($this->height > $this->width) {
    // *** Image to be resized is taller (portrait)
	    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
	    $optimalHeight = $newHeight;
    } else {
    // *** Image to be resizerd is a square
	    if ($newHeight < $newWidth) {
		    $optimalWidth = $newWidth;
		    $optimalHeight = $this->getSizeByFixedWidth($newWidth);
	    } else if ($newHeight > $newWidth) {
		    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
		    $optimalHeight = $newHeight;
	    } else {
		    // *** Sqaure being resized to a square
		    $optimalWidth = $newWidth;
		    $optimalHeight = $newHeight;
	    }
    }
    return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
   }
   ## --------------------------------------------------------
   private function getOptimalCrop($newWidth, $newHeight) {
    $heightRatio = $this->height / $newHeight;
    $widthRatio = $this->width / $newWidth;
    if ($heightRatio < $widthRatio) {
	    $optimalRatio = $heightRatio;
    } else {
	    $optimalRatio = $widthRatio;
    }
    $optimalHeight = $this->height / $optimalRatio;
    $optimalWidth = $this->width / $optimalRatio;
    return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
   }
   ## --------------------------------------------------------
   private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight) {
    // *** Find center - this will be used for the crop
    $cropStartX = ( $optimalWidth / 2) - ( $newWidth / 2 );
    $cropStartY = ( $optimalHeight / 2) - ( $newHeight / 2 );
    $crop = $this->imageResized;
    //imagedestroy($this->imageResized);
    // *** Now crop from center to exact requested size
    $this->imageResized = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($this->imageResized, $crop, 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight, $newWidth, $newHeight);
   }
   ## --------------------------------------------------------
   public function saveImage($savePath, $imageQuality = "100") {
    // *** Get extension
    $extension = strrchr($savePath, '.');
    $extension = strtolower($extension);
    switch ($extension) {
	    case '.jpg':
	    case '.jpeg':
		    if (imagetypes() & IMG_JPG) {
			    imagejpeg($this->imageResized, $savePath, $imageQuality);
		    }
		    break;
	    case '.gif':
		    if (imagetypes() & IMG_GIF) {
			    imagegif($this->imageResized, $savePath);
		    }
		    break;
	    case '.png':
		    // *** Scale quality from 0-100 to 0-9
		    $scaleQuality = round(($imageQuality / 100) * 9);
		    // *** Invert quality setting as 0 is best, not 9
		    $invertScaleQuality = 9 - $scaleQuality;
		    if (imagetypes() & IMG_PNG) {
			    imagepng($this->imageResized, $savePath, $invertScaleQuality);
		    }
		    break;
	    // ... etc
	    default:
		    // *** No extension - No save.
		    break;
    }
    imagedestroy($this->imageResized);
   }
   ## --------------------------------------------------------
}
?>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.