2015-12-27 3 views
0

Следующий код, который у меня есть, представляет собой комбинацию из двух источников.Сжатие изображения с помощью PHP затем Загрузить

Загрузить изображение: http://www.w3schools.com/php/php_file_upload.asp Compression Изображение: https://www.apptha.com/blog/how-to-reduce-image-file-size-while-uploading-using-php-code/

The Image Загрузить функция загрузки прямо на сервере. Сжатие сжимает изображение, а затем загружает его. Я пытаюсь интегрировать эту функцию загрузки в мою функцию загрузки, поскольку она уже встроена в наш веб-сайт.

Следующий код делает две вещи:

  1. Он сжимает при загрузке и загрузки
  2. Загрузки сырьевых изображений на сервер несжатого

То, что я хочу сделать, это сжать на загрузке и отправить к серверу. Мне не нужна загрузка. У меня просто проблемы с объединением двух функций.

<?php 
    $name = ''; $type = ''; $size = ''; $error = ''; 
    function compress_image($source_url, $destination_url, $quality) { 
     $info = getimagesize($source_url); 
     if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url); 
     elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url); 
     elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url); 
     imagejpeg($image, $destination_url, $quality); 
     return $destination_url; 
    } 
if ($_POST) { 
    if ($_FILES["file"]["error"] > 0) { 
     $error = $_FILES["file"]["error"]; 
    } 
    else if (($_FILES["file"]["type"] == "image/gif") || 
      ($_FILES["file"]["type"] == "image/jpeg") || 
      ($_FILES["file"]["type"] == "image/png") || 
      ($_FILES["file"]["type"] == "image/pjpeg")) { 
     $url = 'destination .jpg'; 

     $filename = compress_image($_FILES["file"]["tmp_name"], $url, 80); 
     $buffer = file_get_contents($url); 

     /* Force download dialog... */ 
     header("Content-Type: application/force-download"); 
     header("Content-Type: application/octet-stream"); 
     header("Content-Type: application/download"); 

     /* Don't allow caching... */ 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

     /* Set data type, size and filename */ 
     header("Content-Type: application/octet-stream"); 
     header("Content-Transfer-Encoding: binary"); 
     header("Content-Length: " . strlen($buffer)); 
     header("Content-Disposition: attachment; filename=$url"); 

     /* Send our file... */ 
     echo $buffer; 
//**The following is the image upload to the server********** 
$target_dir = "newuploads/"; 
$target_file = $target_dir . basename($_FILES["file"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);{ 
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { 
     echo "";} 
    } 
} 

    else { 
     $error = "Uploaded image should be jpg or gif or png"; 
    } 
} 
?> 
<html> 
    <head> 
     <title>Php code compress the image</title> 
    </head> 

    <body> 
     <div class="message"> 
      <?php 
      if($_POST){ 
       if ($error) { 
      ?> 
      <label class="error"><?php echo $error; ?></label> 
      <?php 
       } 
      } 
      ?> 
     </div> 
     <fieldset class="well"> 
      <legend>Upload Image:</legend> 
      <form action="" name="myform" id="myform" method="post" enctype="multipart/form-data"> 
       <ul> 
        <li> 
         <label>Upload:</label> 
         <input type="file" name="file" id="file"/> 
        </li> 
        <li> 
         <input type="submit" name="submit" id="submit" class="submit btn-success"/> 
        </li> 
       </ul> 
      </form> 
     </fieldset> 
    </body> 
</html> 

ответ

0

Все, что вам нужно сделать, это удалить часть кода, генерирующий эти данные обратно в браузере, удалить

$buffer = file_get_contents($url); 

    /* Force download dialog... */ 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 

    /* Don't allow caching... */ 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

    /* Set data type, size and filename */ 
    header("Content-Type: application/octet-stream"); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Length: " . strlen($buffer)); 
    header("Content-Disposition: attachment; filename=$url"); 

    /* Send our file... */ 
    echo $buffer; 
+0

Спасибо, что заботится о загрузке. Но переменная сжатия отличается от загружаемой. Как я могу интегрировать сжатие в функцию загрузки? Сейчас он будет загружен на сервер без сжатия. – jm874327

+0

Вы не можете сжать файл, пока он не появится на сервере. – RiggsFolly

+0

Значит, вы говорите, что этот код не будет работать? Если вы не можете предложить, как мне это сделать? – jm874327

Смежные вопросы