www.webdeveloper.com
Results 1 to 2 of 2

Thread: Resize images during upload, and optimize for web

  1. #1
    Join Date
    Apr 2011
    Location
    Seattle, WA
    Posts
    265

    Exclamation Resize images during upload, and optimize for web

    Ok, so I'm making a site with a custom CMS and the people who will be inputting information typically try to hand me photos that are 4000 by 3000 pixels at 300dpi. This is obviously bad... I need to find a way to automatically make them smaller (but still nice-looking) both in file size and image dimensions as they are uploaded to free up space in the server and decrease loading time, etc.

    Any ideas would be greatly appreciated.

  2. #2
    Join Date
    Aug 2004
    Location
    Ankh-Morpork
    Posts
    19,239
    Here's a function I wrote a few years ago (could probably do better now ) that should get you pointed in the right direction. You may want to see if the IMagick library is available, though, as I think it might be a bit more efficient with its memory. I know that with this function using the GD library, a 4000 x 3000 image will take up a lot of RAM, as GD creates a bitmap of the image in memory (width x height x 4 bytes, I think?).
    PHP Code:
    /**
    * Resize image to specific dimension, cropping as needed
    * @return resource Resized image resource, or boolean false on failure
    * @param string $imgFile Path to image to be resized
    * @param int $width
    * @param int $height
    * @param string $error Error message
    */
    function resize($imgFile$width$height, &$error null)
    {
       
    $attrs = @getimagesize($imgFile);
       if(
    $attrs == false or $attrs[2] != IMG_JPEG)
       {
          
    $error "Uploaded image is not JPEG or is not readable by this page.";
          return 
    false;
       }
       if(
    $attrs[0] * $attrs[1] > 3000000)
       {
          
    $error "Max pixels allowed is 3,000,000. Your {$attrs[0]} x " .
                   
    "{$attrs[1]} image has " $attrs[0] * $attrs[1] . " pixels.";
          return 
    false;
       }
       
    $ratio = (($attrs[0] / $attrs[1]) < ($width $height)) ?
                
    $width $attrs[0] : $height $attrs[1];
       
    $x max(0round($attrs[0] / - ($width 2) / $ratio));
       
    $y max(0round($attrs[1] / - ($height 2) / $ratio));
       
    $src imagecreatefromjpeg($imgFile);
       if(
    $src == false)
       {
          
    $error "Unknown problem trying to open uploaded image.";
          return 
    false;
       }
       
    $resized imagecreatetruecolor($width$height);
       
    $result imagecopyresampled($resized$src00$x$y$width$height,
                 
    round($width $ratio0), round($height $ratio));
       if(
    $result == false)
       {
          
    $error "Error trying to resize and crop image.";
          return 
    false;
       }
       else
       {
          return 
    $resized;
       }

    "Please give us a simple answer, so that we don't have to think, because if we think, we might find answers that don't fit the way we want the world to be."
    ~ Terry Pratchett in Nation

    eBookworm.us

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

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



Recent Articles