2017-10-19 83 views
1

目前有一个简单的功能,但它允许用户添加大图像。我希望让所有的图片上传,但应该有,直到某些文件的大小满足(如在200KB例如))命题调整图像大小,直到符合所需的文件大小

if($_FILES['file']['size'] != 0){ 

     $uploadOk = 0; 

     //image object 
     $image = $_FILES['file']; 

     //create unique name for file 
     $imageRandomName = substr(md5(time()), 0, 5) . "-" . $image['name']; 

     //upload dir 
     $target_dir = "rest/user" . $_SESSION["username"] . "/events/" . $_SESSION["event_id"] . "/people/"; 

     //make folder for user if non exists 
     if(!file_exists($target_dir)){ 
      mkdir($target_dir, 0777, true); 
     } 

     //file to be upload 
     $target_file = $target_dir . base($imageRandomName); 

     //get file type 
     $imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

     $check = getimagesize($image["tmp_name"]); 

     if($check !== false){ 
      $uploadOk = 1; 

     } else { 
      $uploadOk = 0; 
     } 

     if($uploadOk == 0){ 

      echo "noupload"; 

     } else { 

      if (move_uploaded_file($image["tmp_name"], $target_file)) { 

       //get file size on server 
       $filesizeonserver = filesize($target_file); 
       echo "file: ".$target_file." size: ".$filesizeonserver; 
       $times = 0; 
       if($filesizeonserver > 100000){ 
        do{ 
         $resized = resizeImage($target_file, "0.1"); 
         $filesizeonserver = filesize($target_file); 
         $times++;  
        } while ($filesizeonserver > 100000); 
        echo "resized ".$times." times"; 
       } else { 

       } 


       //mysql query 

      } else { 

       echo "Sorry, there was an error uploading your file."; 

      } 
     } 
    } else { 
     //do mysql query 
    } 

resizeImage(

function resizeImage($file, $percent){ 
    list($width, $height) = getimagesize($file); 
    $newwidth = $width-($width*$percent); 
    $newheight = $height-($height*$percent); 
    $thumb = imagecreatetruecolor($newwidth, $newheight); 
    $source = imagecreatefromjpeg($file); 
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
    $newImage = imagejpeg($thumb, $file, 100); 
    return $newImage; 
} 

现在调整图像大小的功能我我想我真的很接近实现它,但由于一些奇怪的原因,我得到的图像尺寸为1px宽,4px高,尺寸为4kb。完全黑色的图像。

如果你在想什么图像时增加了这个功能: 1232055字节,1220×1829,为72dpi,JPEG

编辑:好的,现在我觉得有什么不妥的resizeImage功能。因为它只在第一次运作。出于某种原因,它无法获得图像,并呈现出黑色和微小。

编辑2:现在我正在获取图像大小调整功能,它没有任何问题。我注意到该函数不断调整图像的大小直到其结束。我可以看到它如何缩小。

编辑3:我找到了问题。现在看来,$ filesizeonserver始终是第一个值,并在做...而它不更新,即使你是我设置它改变。

+0

要限制文件大小上传吗?你可以简单地检查 $ _FILES ['file'] ['size'] –

+0

你已经显示的代码片段开始于_检查上传文件的大小是否不是0,并且你不能拿出任何东西? – CBroe

+0

当你明白你不明白这一点时,立即对问题进行评级是非常不合理的。我需要的是调整图像大小的函数,我不知道如何继续。 –

回答

0
$allowedFileTypes = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg']; 

     if (in_array($_FILES['image']['type'], $allowedFileTypes)) { 
      $imageType = $_FILES['image']['type']; 
      //allow file size under 10mb 
      if($_FILES['file']['size'] < 10000000){ 

       //image object 
       $image = $_FILES['file']; 

       //so there is no same name files 
       $imageRandomName = substr(md5(time()), 0, 5) . "-" . $image['name']; 

       //place where image is uploaded 
       $target_dir = 'rest/user/' . $_SESSION['username'] . '/events/' . $_SESSION['event_id'] . '/people/'; 

       //make folder for users 
       if (!file_exists($target_dir)) { 
        mkdir($target_dir, 0777, true); 
       } 

       //file to be uploded 
       $target_file = $target_dir . basename($imageRandomName); 

       //get file type 
       //$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

       $check = getimagesize($image["tmp_name"]); 

       if ($check !== false) { 
        echo "File is an image - " . $check["mime"] . "."; 
        $uploadOk = 1; 
       } else { 
        echo "File is not an image."; 
        $uploadOk = 0; 
       } 

       //check if upload is ok 
       if ($uploadOk == 0) { 
        echo "Sorry cant upload"; 
       } else { 
        if (move_uploaded_file($image["tmp_name"], $target_file)) { 


         //get file size on server 
         $filesizeonserver = filesize($target_file); 

         $times = 0; 

         if($filesizeonserver > 300000){ 
          do{ 
           clearstatcache(); 
           $resized = resizeImage($target_file, 0.05, $imageType); 
           $filesizeonserver = filesize($target_file); 
           $times++;  
          } while ($filesizeonserver > 300000); 
          echo "resized ".$times." times"; 
         } else { 

         } 

         //sql query 

        } else { 
         echo "Sorry, there was an error uploading your file."; 
        } 
       } 

      } else { 
       //sql query 
      } 
     } else { 
      echo "wrongimagetype"; 
     } 

resizeImage() 

function resizeImage($file, $percent, $imageType){ 

    list($width, $height) = getimagesize($file); 
    $newwidth = $width-($width*$percent); 
    $newheight = $height-($height*$percent); 

    $thumb = imagecreatetruecolor($newwidth, $newheight); 

    switch($imageType){ 
     case 'image/png': 
      $background = imagecolorallocate($thumb, 0, 0, 0); 
      imagecolortransparent($thumb, $background); 
      imagealphablending($thumb, false); 
      imagesavealpha($thumb, true); 
      $source = imagecreatefrompng($file); 
      break; 
     case 'image/gif': 
      $background = imagecolorallocate($thumb, 0, 0, 0); 
      imagecolortransparent($thumb, $background); 
      imagealphablending($thumb, false); 
      imagesavealpha($thumb, true); 
      $source = imagecreatefromgif($file); 
      break; 
     case 'image/jpeg': 
     case 'image/jpg': 
      $source = imagecreatefromjpeg($file); 
      break; 
    } 

    imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

    switch($imageType){ 
     case 'image/png': 
      $image = imagepng($thumb, $file, 0); 
      break; 
     case 'image/gif': 
      $image = imagegif($file); 
      break; 
     case 'image/jpeg': 
     case 'image/jpg': 
      $image = imagejpeg($thumb, $file, 100); 
      break; 
    } 

    return $image; 
} 

OUTPUT:

File is an image - image/jpeg.resized 17 times 

免责声明:所有的东西你作品的图像质量受些影响。需要努力。

+0

对问题的最后评论是通过在调整大小之前追加clearstatcache()来解决的。 –

+0

添加allowedFileTypes png,gif,jpg和jpeg。 –

+0

现在它支持透明度,图像质量不匹配Photoshop:D –