Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I have written a class for manipulating images, save this as a php file and include in your code:</p> <pre><code>Class Resize { //Variables private $image; private $width; private $height; private $imageResized; private $imageAplha; function __construct($fileName, $tmpFile = NULL) { //Open Image $this-&gt;image = $this-&gt;openImage($fileName, $tmpFile); //Get width and height $this-&gt;width = imagesx($this-&gt;image); $this-&gt;height = imagesy($this-&gt;image); } private function openImage($file, $tmpFile = NULL) { //Get extension $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if ($tmpFile != NULL) { $cfile = $tmpFile; } else { $cfile = $file; } switch ($extension) { case 'jpg': case 'jpeg': $img = @imagecreatefromjpeg($cfile); $this-&gt;imageAplha = false; break; case 'gif': $img = @imagecreatefromgif($cfile); $this-&gt;imageAplha = false; break; case 'png': $img = @imagecreatefrompng($cfile); imagealphablending($img, true); $this-&gt;imageAplha = true; 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 w, h size $this-&gt;imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight); if ($this-&gt;imageAplha) { imagealphablending($this-&gt;imageResized, false); imagesavealpha($this-&gt;imageResized, true); } imagecopyresampled($this-&gt;imageResized, $this-&gt;image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this-&gt;width, $this-&gt;height); //If CROP 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; //Now crop from center to exact requested size $this-&gt;imageResized = imagecreatetruecolor($newWidth, $newHeight); if ($this-&gt;imageAplha) { imagealphablending($this-&gt;imageResized, false); imagesavealpha($this-&gt;imageResized, true); } imagecopyresampled($this-&gt;imageResized, $crop, 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight, $newWidth, $newHeight); } public function saveImage($savePath, $imageQuality = "100") { //Get extension $extension = strtolower(pathinfo($savePath, PATHINFO_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; default: //No extension - No save. break; } imagedestroy($this-&gt;imageResized); } } </code></pre> <p>You can then call and resize/crop the image using:</p> <pre><code>$resizeObj = new resize([filetomanipulate]); $resizeObj-&gt;resizeImage([width], [height], [exact, portrait, landscape, auto, crop]); $resizeObj-&gt;saveImage([outputfilename], [quality{0-100}]); </code></pre> <p>Hope you find this helpful.. Happy coding :)</p>
    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. This table or related slice is empty.
    1. 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