} if (!function_exists('imagecreatefrompng')) { CMS_grandFather::raiseError('Can\'t find imagecreatefrompng, please install GD library.'); $return['error'] = $cms_language->getJsMessage(MESSAGE_PAGE_PNG_SUPPORT); $view->setContent($return); $view->show(); } //Resize image if (!$image->resize($width, $height, '', true, $autocrop)) { CMS_grandFather::raiseError('Error during treatment of file ' . $image->getFilename() . ', please check GD library.'); $return['error'] = $cms_language->getJsMessage(MESSAGE_PAGE_LIB_GD_VERIF); $view->setContent($return); $view->show(); } //Crop image if needed if ($cropTop || $cropBottom || $cropLeft || $cropRight) { if (!$image->crop($cropTop, $cropBottom, $cropLeft, $cropRight)) { CMS_grandFather::raiseError('Error during treatment of file ' . $image->getFilename() . ', please check GD library.'); $return['error'] = $cms_language->getJsMessage(MESSAGE_PAGE_LIB_GD_VERIF); $view->setContent($return); $view->show(); } } $newimage = new CMS_file($image->getFilename()); //set new image infos and return clearstatcache(); $return['filesize'] = $newimage->getFileSize(); $return['filepath'] = $newimage->getFilePath(CMS_file::WEBROOT); $return['filename'] = $newimage->getFilename(false); $view->setContent($return); $view->show();
/** * Resize current image to a specified size * * @param integer $newSizeX, the new width size for the image in pixels * @param integer $newSizeY, the new height size for the image in pixels * @param integer $saveToPathFS, save resized image to given FS path instead of replacing current one * @param boolean $keepRatio, keep current image ratio (default : true) * @param boolean $crop, crop image if needed to respect ratio and image dimension queried (default : false) * @return boolean true on success, false on failure * @access public */ function resize($newSizeX, $newSizeY, $saveToPathFS = '', $keepRatio = true, $crop = false) { $imagepathFS = $this->getFilename(); $sizeX = $this->getWidth(); $sizeY = $this->getHeight(); if (!io::isPositiveInteger($sizeX) || !io::isPositiveInteger($sizeY)) { $this->raiseError('Unkown image size ...'); return false; } //if no resize needed if ($sizeX == $newSizeX && $sizeY == $newSizeY) { if (!$saveToPathFS) { return true; } return CMS_file::copyTo($imagepathFS, $saveToPathFS); } //if we do not have a path to save image, replace current file if (!$saveToPathFS) { $this->_height = $this->_width = null; $saveToPathFS = $imagepathFS; } if ($keepRatio) { //store original queried size $x = $newSizeX; $y = $newSizeY; if (!$crop) { // set new image dimensions without crop $newSizeX = $sizeX; $newSizeY = $sizeY; if ($x && $newSizeX > $x) { $newSizeY = round($x * $newSizeY / $newSizeX); $newSizeX = $x; } if ($y && $newSizeY > $y) { $newSizeX = round($y * $newSizeX / $newSizeY); $newSizeY = $y; } } else { // set new image dimensions with crop if ($sizeX == $x || $sizeY == $y) { $newSizeX = $sizeX; $newSizeY = $sizeY; } else { $newSizeX = $x; $newSizeY = round($sizeY * $x / $sizeX); if ($newSizeY < $y) { $newSizeX = round($sizeX * $y / $sizeY); $newSizeY = $y; } } } } //CMS_grandFather::log("\n".'Image : '.$this->getFilename(false).' -- original : '.$sizeX.' - '.$sizeY." -- ".'queried : '.$x.' - '.$y." -- ".'new : '.$newSizeX.' - '.$newSizeY); //resize image if ($newSizeX < $sizeX || $newSizeY < $sizeY) { //resize image and keep transparency if any switch ($this->getExtension()) { case "gif": $src = imagecreatefromgif($imagepathFS); $dest = imagecreate($newSizeX, $newSizeY); $transparent = imagecolortransparent($src); // If we have a specific transparent color if ($transparent >= 0) { $transColor = imagecolorsforindex($src, $transparent); $transparent = imagecolorallocate($dest, $transColor['red'], $transColor['green'], $transColor['blue']); imagefill($dest, 0, 0, $transparent); imagecolortransparent($dest, $transparent); } //create new image imagecopyresampled($dest, $src, 0, 0, 0, 0, $newSizeX, $newSizeY, $sizeX, $sizeY); imagegif($dest, $saveToPathFS); //destroy resources imagedestroy($src); imagedestroy($dest); break; case "jpg": case "jpeg": case "jpe": $src = imagecreatefromjpeg($imagepathFS); $dest = imagecreatetruecolor($newSizeX, $newSizeY); //create new image imagecopyresampled($dest, $src, 0, 0, 0, 0, $newSizeX, $newSizeY, $sizeX, $sizeY); imagejpeg($dest, $saveToPathFS, self::JPEG_QUALITY); //destroy resources imagedestroy($src); imagedestroy($dest); break; case "png": $src = imagecreatefrompng($imagepathFS); $dest = imagecreatetruecolor($newSizeX, $newSizeY); //save alpha channel imagealphablending($dest, false); imagesavealpha($dest, true); $transparent = imagecolorallocatealpha($dest, 255, 255, 255, 127); imagefilledrectangle($dest, 0, 0, $newSizeX, $newSizeY, $transparent); //create new image imagecopyresampled($dest, $src, 0, 0, 0, 0, $newSizeX, $newSizeY, $sizeX, $sizeY); imagepng($dest, $saveToPathFS, self::PNG_COMPRESSION); //destroy resources imagedestroy($src); imagedestroy($dest); break; } //chmod new file CMS_file::chmodFile(FILES_CHMOD, $saveToPathFS); } elseif ($imagepathFS != $saveToPathFS) { //copy file to new destination if saveToPathFS is not the same as current imagepathFS CMS_file::copyTo($imagepathFS, $saveToPathFS); } //check for crop if needed if ($keepRatio && $crop && ($newSizeX > $x || $newSizeY > $y)) { $cropTop = $cropBottom = $cropLeft = $cropRight = 0; //calculate crop values if ($newSizeX > $x) { $cropLeft = ceil(($newSizeX - $x) / 2); $cropRight = floor(($newSizeX - $x) / 2); } if ($newSizeY > $y) { $cropTop = ceil(($newSizeY - $y) / 2); $cropBottom = floor(($newSizeY - $y) / 2); } $tmpImage = new CMS_image($saveToPathFS); return $tmpImage->crop($cropTop, $cropBottom, $cropLeft, $cropRight); } return true; }