0

i have a from and from that i forced user to upload a image and other details etc....And in my root directory i created one folder called(user_images) Every thing is fine , but the problem is..user may insert large files so that loading of webpage is slow... how to resize before uploading to database...

here is my code...

if(isset($_POST['btnsave']))
{
    $camname = $_POST['cam_name'];// user name
    $modelname = $_POST['model'];// user email
    $rentpday = $_POST['rent_pday'];// user name
    $usermob = $_POST['mob'];// user email
    $useraddrs = $_POST['addrs'];// user email
    $upd_date =date('Y-m-d H:i:s');//upl_date

    $imgFile = $_FILES['user_image']['name'];
    $tmp_dir = $_FILES['user_image']['tmp_name'];
    $imgSize = $_FILES['user_image']['size'];


    if(empty($camname)){
        $errMSG = "Please Enter Cam name.";
    }
    else if(empty($usermob)){
        $errMSG = "Please mobile number";
    }
    else if(empty($camname)){
        $errMSG = "Please enter cam_name";
    }
    else if(empty($modelname)){
        $errMSG = "Please enter model";
    }
    else if(empty($rentpday)){
        $errMSG = "Please enter rent per day";
    }
    else if(empty($imgFile)){
        $errMSG = "Please Select Image File.";
    }
    else
    {
        $upload_dir = 'user_images/'; // upload directory

        $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); // get image extension

        // valid image extensions
        $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions

        // rename uploading image
        $userpic = rand(1000,1000000).".".$imgExt;

        // allow valid image file formats
        if(in_array($imgExt, $valid_extensions)){           
            // Check file size '5MB'
            if($imgSize < 5000000)              {
                move_uploaded_file($tmp_dir,$upload_dir.$userpic);
            }
            else{
                $errMSG = "Sorry, your file is too large.";
            }
        }
        else{
            $errMSG = "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";        
        }
    }


    // if no error occured, continue ....
    if(!isset($errMSG))
    {


        $stmt = $user_home->runQuery("UPDATE post_data 
                                      set cam_name=?,
                                      cam_model =?, 
                                      cam_rent=?,
                                      cam_img=?,
                                      mobile=?,
                                      address=?,
                                      upd_date=? 
                                      where userID=?
                                      ");

        $stmt->bindParam(1,$camname);
        $stmt->bindParam(2,$modelname);
        $stmt->bindParam(3,$rentpday);
        $stmt->bindParam(4,$userpic);
        $stmt->bindParam(5,$usermob);
        $stmt->bindParam(6,$useraddrs);
        $stmt->bindParam(7,$upd_date);
        $stmt->bindParam(8,$id);

        if($stmt->execute())
        {

            $successMSG = "Record saved success";
        }
        else
        {
            $errMSG = "error while inserting....";
        }

    }
}

Any changes in this code to compress image size before uploading.. thanks in advance..

Mark Setchell
  • 191,897
  • 31
  • 273
  • 432
lohith kumar
  • 55
  • 4
  • 11
  • you could restrict them to some specific size – Ravi Oct 01 '17 at 05:41
  • i set to 5mb...but if user enters 4.2 mb image file... it doesn't give any error , inserts into database but image file not visible in webpage when i retrieve .. – lohith kumar Oct 01 '17 at 05:44

2 Answers2

0

AFAIK, you can't maintain the quality while reducing the size of the image. You could use imagejpeg, to reduce the size of the image by reducing it quality.

When you are about to save the image, you need to reduce the quality of image first.

        if($imgSize < 5000000) {
            $image = imagecreatefromjpeg($upload_dir.$userpic);
            imagejpeg($image, $new_image_path, 70);
            move_uploaded_file($tmp_dir,$new_image_path);
        }
Ravi
  • 30,829
  • 42
  • 119
  • 173
  • oh ..Where to use in my above – lohith kumar Oct 01 '17 at 05:50
  • @lohithkumar Also, note that we are reducing the quality. – Ravi Oct 01 '17 at 06:00
  • Warning: imagecreatefromjpeg(user_images/768709.jpg): failed to open stream: No such file or directory – lohith kumar Oct 01 '17 at 06:08
  • @lohithkumar is not the valid path. Were you able to save image earlier ? I'm sure you aren't. Because, you are saving `userpic`, which seems to be image name only – Ravi Oct 01 '17 at 06:09
  • i got the point bro.... before saving that img file into user_images folder.. how can we open stream for that particular file....is it possible...from my above i will not saved $userpic before it checks the file size..... – lohith kumar Oct 01 '17 at 06:14
  • @lohithkumar correct. You need to pass image path, which exists – Ravi Oct 01 '17 at 06:14
0

It is actually super easy to compress images. Just change them all over to png:

$image = imagecreatefromstring(file_get_contents($tmp_dir));
$saveLocation = “user_images/”.md5(uniqid()).”png”;
//Please use this instead of your current file naming method to remove the possibility of a duplicate (which rand will sometimes yield)
imagepng($image,$saveLocation,9);
//9 represents the compression level (0 no compression - 9 max compression)

That’s really it! Png is a lossless compression method so you won’t lose any quality in the process