SitePoint Sponsor

User Tag List

Results 1 to 2 of 2
  1. #1
    SitePoint Addict
    Join Date
    Apr 2006
    Location
    London, United Kingdom
    Posts
    288
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    How to best store and manipulate images on a large site?

    I know there are many threads on storing images, but I can't really arrive at a conclusion in terms of what's best for my current project.

    To put it simply, it's a mix between eBay and Gumtree.com. It will contain listings which will have photos and images associated with them. Users will be able to upload a set number of photos for each listing. Each photo will need to be resized to a decent full size and also to a thumbnail size. What I am struggling with is:

    • How and where to store the images
      Should I store them on the same server or different?
      Should I store all images in one folder or separate them into a folder for each listing?
      Should I store and keep the original non resized ones?
    • What mechanism or script should I use to validate and resize them
      Should I store them readily resized or resize them each time it's displayed using some php script?
    • What method gets the most performance


    I would appreciate if I could get any guidance on this. Thanks.
    eFlair Design | Premium Design Services and Web Consultation

  2. #2
    SitePoint Evangelist smftre's Avatar
    Join Date
    Dec 2008
    Location
    London
    Posts
    436
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Storing images is quite a debatable topic as it's also quite a personal one and each developer/server admin has their own thoughts on the matter. So I will suggest what I would do so perhaps that will either answer your question or point you in the right direction.


    • How and where to store the images
      Should I store them on the same server or different? How much money do you have?
      Should I store all images in one folder or separate them into a folder for each listing? Same folder is easier.
      Should I store and keep the original non resized ones? If you are going to use it again.
    • What mechanism or script should I use to validate and resize them
      Should I store them readily resized or resize them each time it's displayed using some php script? Just use the imagecreatefromjpeg function.
    • What method gets the most performance
      A custom method


    If you don't have much $$$ for servers and extra cool things, then just save them all in a parent /images/ directory, otherwise you can put it on a subdomain on the main domain and point the cname to your image storage server. You can upload an image and then create a uniqueid of it and then md5 the filename and store each size of the image you create as /images/bnmsayhjinkjy342_t.jpg, /images/bnmsayhjinkjy342_s.jpg, /images/bnmsayhjinkjy342_m.jpg, /images/bnmsayhjinkjy342_l.jpg (t=thumbnail, s=small, m=medium, l=large). and then store the md5 hash in your database and you can then access all the files when you need them super easily.

    Try a function like the following perhaps:


    PHP Code:
    function resizeImage($image$width$height){
        
    $tmp split("\."basename($image));
        
    $ext $tmp[1];
        
        switch( 
    $ext ){
            case 
    "jpg": case "JPG": case "jpeg": case "JPEG"$src_img imagecreatefromjpeg($image); break;
            case 
    "png": case "PNG"$src_img imagecreatefrompng($image); break;
        }
        
        
    $dst_img imagecreatetruecolor($width$height);
        
        
    $src_dimensions getimagesize($image);
        
    $src_width $src_dimensions[0];
        
    $src_height $src_dimensions[1];
        
        
    $prop_src $src_width/$src_height;
        
    $prop_dst $width/$height;
        
        if( 
    $prop_src $prop_dst ){
            
    $dst_height $height;
            
    $dst_width $src_width*$height/$src_height;
            
    $prop_crop $src_height/$height;
            
    $src_point_x abs($src_width-$width*$prop_crop)/2;
            
    $src_point_y 0;
        } else {
            
    $dst_width $width;
            
    $dst_height $src_height*$width/$src_width;
            
    $prop_crop $src_width/$width;
            
    $src_point_x 0;
            
    $src_point_y abs($src_height-$height*$prop_crop)/2;
        }
        
        
    imagecopyresampled($dst_img$src_img00$src_point_x$src_point_y$dst_width$dst_height$src_width$src_height);
        
        switch( 
    $ext ){
            case 
    "jpg": case "JPG": case "jpeg": case "JPEG"imagejpeg($dst_img$image); break;
            case 
    "png": case "PNG"imagepng($dst_img$image); break;
        }
        

    Statvoo.com The Website Traffic Monitor
    The best way to monitor traffic to your sites for free!


    Web Development London UK We make web 3.0 applications


Bookmarks

Posting Permissions

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