Exemplo n.º 1
0
}
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();
Exemplo n.º 2
0
 /**
  * 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;
 }