Resizing the image in php for viewing purposes only Resizing the image in php for viewing purposes only php php

Resizing the image in php for viewing purposes only


I use a simple PHP class which has several options for resizing. You can easily store the thumbnails via this class. As @jeroen said, you only have to do it once and they can be cached. It just requires PHP5 and GD library. Here is usage example:

// *** Include the classinclude("resize-class.php");// *** 1) Initialise / load image$resizeObj = new resize('sample.jpg');// *** 2) Resize image (options: exact, portrait, landscape, auto, crop)$resizeObj -> resizeImage(150, 150, 'crop');// *** 3) Save image ('image-name', 'quality [int]')$resizeObj -> saveImage('sample-resized.jpg', 100);

And this is that class:

<?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);            }            ## --------------------------------------------------------        }?>


You load the image, resize it first so that it has the minimum side being 150, then you crop to the 150 width/height relative to the center. Then you just output your image:

WideImage::load('yourfile.png/jpg/...')    ->resize(150, 150, 'outside', 'any')    ->crop('center', 'center', 150, 150)    ->output('png');

You find the sourcecode, documentation, online demos and the API documentation here: WideImage.

Let me know if you've still got questions.


It is very easy to usehere is the class https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/timthumb/timthumb.phphere are the params http://viralpatel.net/blogs/resize-image-dynamically-php/I have tested looks works great

example is< img src="/script/timthumb.php?src=/some/path/myimage.png&w=100&h=80"alt="resized image" />

Remember that you should be careful to use this, If you do not create regex validation for input params you may have security vulnerability.That's why they deprecated this lib, but it works perfect.