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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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.