Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 3 of 3
  1. #1
    Regular Coder
    Join Date
    Oct 2009
    Posts
    410
    Thanks
    6
    Thanked 3 Times in 3 Posts

    resizer class does not resize BMP file types.

    This is my script that brings the resizing together...

    Code:
    $newFilenameO = '/home/username/public_html/itemImages/O'.$newFileName;
    $newFilenameL = '/home/username/public_html/itemImages/L'.$newFileName;
    $newFilenameS = '/home/username/public_html/itemImages/S'.$newFileName;
    if (move_uploaded_file($_FILES['files']['tmp_name'][$i], $newFilenameO)) {
    
    
    		// original bmp gets uploaded ok.
    
    
    
    //exit;
    $filenames .= ''.$newFileName . '||';
    ///
    $resizeObj = new resize($newFilenameO); // *** 1) Initialise / load image
    $resizeObj -> resizeImage(400, 400, 'auto'); // *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
    $resizeObj -> saveImage($newFilenameL, 100); // *** 3) Save image
    
    
    		// does not seem to save a valid BMP file.  a file is saved though. but not an image.
    
    
    
    var_dump($resizeObj);
    ?><br><br><?
    ///
    //exit;
    ///
    $resizeObj2 = new resize($newFilenameO); // *** 1) Initialise / load image
    $resizeObj2 -> resizeImage(120, 120, 'auto'); // *** 2) Resize image (options: exact, portrait, landscape, auto, crop)
    $resizeObj2 -> saveImage($newFilenameS, 100); // *** 3) Save image, 100 being the % of quality.
    
    
    		// does not seem to save a valid BMP file.
    
    
    
    
    var_dump($resizeObj2);
    exit;
    ///
    // set variable for the images added.
    
    } else {
    $uploadError = "uploadError";
    }

    I have added code to the next code thinking that it would also resize BMP files but it seems it does not work.

    The code does GIF, JPG, JPEG and PNG fine. But does not save the file in BMP format.

    Can this code be changed so it can resize BMP file types ?


    Or is there a better resizer that works with more file types ?



    Code:
    <?php
    
       # ========================================================================#
       #
       #  Author:    Jarrod Oberto
       #  Version:	 1.0
       #  Date:      17-Jan-10
       #  Purpose:   Resizes and saves image
       #  Requires : Requires PHP5, GD library.
       #  Usage Example:
       #                     include("classes/resize_class.php");
       #                     $resizeObj = new resize('images/cars/large/input.jpg');
       #                     $resizeObj -> resizeImage(150, 100, 0);
       #                     $resizeObj -> saveImage('images/cars/large/output.jpg', 100);
       #
       #
       # ========================================================================#
    
    
    		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;
    					case '.bmp':
    						$img = @imagecreatefromwbmp($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;
    
    					case '.bmp':
    						if (imagetypes() & IMG_WBMP) {
    							imagewbmp($this->imageResized, $savePath);
    						}
    						break;
    
    					// ... etc
    
    					default:
    						// *** No extension - No save.
    						break;
    				}
    
    				imagedestroy($this->imageResized);
    			}
    
    
    			## --------------------------------------------------------
    
    		}
    ?>

  • #2
    God Emperor Fou-Lu's Avatar
    Join Date
    Sep 2002
    Location
    Saskatoon, Saskatchewan
    Posts
    16,978
    Thanks
    4
    Thanked 2,659 Times in 2,628 Posts
    wbmp <> bmp. Its possible somewhere down the line the wbmp is also allowing bmp, but at least in the past it never did.
    Writing one is pretty easy though, but if you just google for imagecreatefrombmp() you'll probably find a user function instead to just copy and paste. It'd be relatively easy to modify the code to handle both wbmp and bmp. Add a case for the wbmp extension on the switch in the openImage method, and modify the bmp case to use your newly created function instead.

    Ultimately I typically open the file and read it in, then just pass it to the imagecreatefromstring method. I don't think that works with bmp though (on that same token I don't recall the last time I've actually stored anything as bmp).
    PHP Code:
    header('HTTP/1.1 420 Enhance Your Calm'); 

  • #3
    Senior Coder
    Join Date
    Sep 2010
    Posts
    1,899
    Thanks
    15
    Thanked 226 Times in 226 Posts
    I read that you have to have G-D version 1.8 or later to handle .bmp files. But you can very easily make them with Imagemagick. I have them both, and Imagemagick is only about one line of code. Maybe more to make the input data. But you need to have shell access to write simple scripts.
    Welcome to http://www.myphotowizard.net

    where you can edit images, make a photo calendar, add text to images, and do much more.


    When you know what you're doing it's called Engineering, when you don't know, it's called Research and Development. And you can always charge more for Research and Development.


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •