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
    269

    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
    22,335
    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;
       }

    "Well done....Consciousness to sarcasm in five seconds!" ~ Terry Pratchett, Night Watch

    How to Ask Questions the Smart Way (not affiliated with this site, but well worth reading)

    My Blog
    cwrBlog: simple, no-database PHP blogging framework

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

"

"

X vBulletin 4.2.2 Debug Information

  • Page Generation 0.12192 seconds
  • Memory Usage 2,877KB
  • Queries Executed 15 (?)
More Information
Template Usage (33):
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (2)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (2)postbit
  • (2)postbit_onlinestatus
  • (2)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (70):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates