Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>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:</p> <pre><code>// *** Include the class include("resize-class.php"); // *** 1) Initialise / load image $resizeObj = new resize('sample.jpg'); // *** 2) Resize image (options: exact, portrait, landscape, auto, crop) $resizeObj -&gt; resizeImage(150, 150, 'crop'); // *** 3) Save image ('image-name', 'quality [int]') $resizeObj -&gt; saveImage('sample-resized.jpg', 100); </code></pre> <p>And this is that class:</p> <pre><code>&lt;?php Class resize { // *** Class variables private $image; private $width; private $height; private $imageResized; function __construct($fileName) { // *** Open up the file $this-&gt;image = $this-&gt;openImage($fileName); // *** Get width and height $this-&gt;width = imagesx($this-&gt;image); $this-&gt;height = imagesy($this-&gt;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-&gt;getDimensions($newWidth, $newHeight, $option); $optimalWidth = $optionArray['optimalWidth']; $optimalHeight = $optionArray['optimalHeight']; // *** Resample - create image canvas of x, y size $this-&gt;imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight); imagecopyresampled($this-&gt;imageResized, $this-&gt;image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this-&gt;width, $this-&gt;height); // *** if option is 'crop', then crop too if ($option == 'crop') { $this-&gt;crop($optimalWidth, $optimalHeight, $newWidth, $newHeight); } } ## -------------------------------------------------------- private function getDimensions($newWidth, $newHeight, $option) { switch ($option) { case 'exact': $optimalWidth = $newWidth; $optimalHeight= $newHeight; break; case 'portrait': $optimalWidth = $this-&gt;getSizeByFixedHeight($newHeight); $optimalHeight= $newHeight; break; case 'landscape': $optimalWidth = $newWidth; $optimalHeight= $this-&gt;getSizeByFixedWidth($newWidth); break; case 'auto': $optionArray = $this-&gt;getSizeByAuto($newWidth, $newHeight); $optimalWidth = $optionArray['optimalWidth']; $optimalHeight = $optionArray['optimalHeight']; break; case 'crop': $optionArray = $this-&gt;getOptimalCrop($newWidth, $newHeight); $optimalWidth = $optionArray['optimalWidth']; $optimalHeight = $optionArray['optimalHeight']; break; } return array('optimalWidth' =&gt; $optimalWidth, 'optimalHeight' =&gt; $optimalHeight); } ## -------------------------------------------------------- private function getSizeByFixedHeight($newHeight) { $ratio = $this-&gt;width / $this-&gt;height; $newWidth = $newHeight * $ratio; return $newWidth; } private function getSizeByFixedWidth($newWidth) { $ratio = $this-&gt;height / $this-&gt;width; $newHeight = $newWidth * $ratio; return $newHeight; } private function getSizeByAuto($newWidth, $newHeight) { if ($this-&gt;height &lt; $this-&gt;width) // *** Image to be resized is wider (landscape) { $optimalWidth = $newWidth; $optimalHeight= $this-&gt;getSizeByFixedWidth($newWidth); } elseif ($this-&gt;height &gt; $this-&gt;width) // *** Image to be resized is taller (portrait) { $optimalWidth = $this-&gt;getSizeByFixedHeight($newHeight); $optimalHeight= $newHeight; } else // *** Image to be resizerd is a square { if ($newHeight &lt; $newWidth) { $optimalWidth = $newWidth; $optimalHeight= $this-&gt;getSizeByFixedWidth($newWidth); } else if ($newHeight &gt; $newWidth) { $optimalWidth = $this-&gt;getSizeByFixedHeight($newHeight); $optimalHeight= $newHeight; } else { // *** Sqaure being resized to a square $optimalWidth = $newWidth; $optimalHeight= $newHeight; } } return array('optimalWidth' =&gt; $optimalWidth, 'optimalHeight' =&gt; $optimalHeight); } ## -------------------------------------------------------- private function getOptimalCrop($newWidth, $newHeight) { $heightRatio = $this-&gt;height / $newHeight; $widthRatio = $this-&gt;width / $newWidth; if ($heightRatio &lt; $widthRatio) { $optimalRatio = $heightRatio; } else { $optimalRatio = $widthRatio; } $optimalHeight = $this-&gt;height / $optimalRatio; $optimalWidth = $this-&gt;width / $optimalRatio; return array('optimalWidth' =&gt; $optimalWidth, 'optimalHeight' =&gt; $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-&gt;imageResized; //imagedestroy($this-&gt;imageResized); // *** Now crop from center to exact requested size $this-&gt;imageResized = imagecreatetruecolor($newWidth , $newHeight); imagecopyresampled($this-&gt;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() &amp; IMG_JPG) { imagejpeg($this-&gt;imageResized, $savePath, $imageQuality); } break; case '.gif': if (imagetypes() &amp; IMG_GIF) { imagegif($this-&gt;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() &amp; IMG_PNG) { imagepng($this-&gt;imageResized, $savePath, $invertScaleQuality); } break; // ... etc default: // *** No extension - No save. break; } imagedestroy($this-&gt;imageResized); } ## -------------------------------------------------------- } ?&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload