Resize image before uploading PHP

后端 未结 2 770
离开以前
离开以前 2020-12-15 02:26

I have no idea how to resize image in PHP, my code is:

for ($index = 1; $index <= 2; $index++) { 

    if (!empty($_FILES[\"pic$index\"][\"name\"])) {
            


        
相关标签:
2条回答
  • 2020-12-15 02:31

    Keep in mind that the picture you are dealing with is already uploaded on the server. You actualy want to resize picture before storing it in "safe place".

    $_FILES["pic$index"]["tmp_name"] is probably /tmp/somepicturesname

    0 讨论(0)
  • 2020-12-15 02:42

    Here is the code I'm using to resize images.

    In my case I give to the function the original file name and then the thumbnail file name.

    You can adapt it for your case very easily.

    public static function GenerateThumbnail($im_filename,$th_filename,$max_width,$max_height,$quality = 0.75)
    {
    // The original image must exist
    if(is_file($im_filename))
    {
        // Let's create the directory if needed
        $th_path = dirname($th_filename);
        if(!is_dir($th_path))
            mkdir($th_path, 0777, true);
        // If the thumb does not aleady exists
        if(!is_file($th_filename))
        {
            // Get Image size info
            list($width_orig, $height_orig, $image_type) = @getimagesize($im_filename);
            if(!$width_orig)
                return 2;
            switch($image_type)
            {
                case 1: $src_im = @imagecreatefromgif($im_filename);    break;
                case 2: $src_im = @imagecreatefromjpeg($im_filename);   break;
                case 3: $src_im = @imagecreatefrompng($im_filename);    break;
            }
            if(!$src_im)
                return 3;
    
    
            $aspect_ratio = (float) $height_orig / $width_orig;
    
            $thumb_height = $max_height;
            $thumb_width = round($thumb_height / $aspect_ratio);
            if($thumb_width > $max_width)
            {
                $thumb_width    = $max_width;
                $thumb_height   = round($thumb_width * $aspect_ratio);
            }
    
            $width = $thumb_width;
            $height = $thumb_height;
    
            $dst_img = @imagecreatetruecolor($width, $height);
            if(!$dst_img)
                return 4;
            $success = @imagecopyresampled($dst_img,$src_im,0,0,0,0,$width,$height,$width_orig,$height_orig);
            if(!$success)
                return 4;
            switch ($image_type) 
            {
                case 1: $success = @imagegif($dst_img,$th_filename); break;
                case 2: $success = @imagejpeg($dst_img,$th_filename,intval($quality*100));  break;
                case 3: $success = @imagepng($dst_img,$th_filename,intval($quality*9)); break;
            }
            if(!$success)
                return 4;
        }
        return 0;
    }
    return 1;
    }
    

    The return codes are just here to differentiate between different types of errors.

    By looking back at that code, I don't like the "magic number" trick. I'm gonna have to change that (by exceptions for example).

    if (!empty($_FILES["pic$index"]["name"])) {
        $ext = substr($_FILES["pic$index"]["name"], strrpos($_FILES["pic$index"]["name"], '.') + 1);
        $dir = "../gallery/$mkdir";
        // Move it
        if(move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext.tmp"))
        {
          // Resize it
          GenerateThumbnail("$dir/img-$index.$ext.tmp","$dir/img-$index.$ext",600,800,0.80);
          // Delete full size
          unlink("$dir/img-$index.$ext.tmp");
        }
    } 
    

    Use move_uploaded_file to move it (recommanded) and then you can resize it and send it to it's final destination. You might not even need the ".tmp", you can use.

        // Move it
        if(move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext"))
        // Resize it
          GenerateThumbnail("$dir/img-$index.$ext","$dir/img-$index.$ext",600,800); 
    
    0 讨论(0)
提交回复
热议问题