2009-08-10 172 views
9

我正在上傳產品截圖到我的網站...我想上傳原始圖像,併爲它創建縮略圖,但是在上傳兩個文件後,縮略圖的文件大小比預期的要大。有什麼辦法可以減少縮略圖的文件大小,而不會影響php的質量或使用Imagemagick(我不知道如何使用,但我願意學習如果需要)...
下面是我使用我的上傳文件的代碼..
上傳壓縮圖像文件大小?

<form action="<?php echo $_server['php-self']; ?>" method="post" enctype="multipart/form-data" id="something" class="uniForm"> 
    <input name="new_image" id="new_image" size="30" type="file" class="fileUpload" /> 
    <button name="submit" type="submit" class="submitButton">Upload/Resize Image</button> 


<?php 
    if(isset($_POST['submit'])){ 
     if (isset ($_FILES['new_image'])){ 
      $imagename = $_FILES['new_image']['name']; 
      $source = $_FILES['new_image']['tmp_name']; 
      $target = "images/".$imagename; 
      move_uploaded_file($source, $target); 

      $imagepath = $imagename; 
      $save = "images/" . $imagepath; //This is the new file you saving 
      $file = "images/" . $imagepath; //This is the original file 

      list($width, $height) = getimagesize($file) ; 


      $tn = imagecreatetruecolor($width, $height) ; 
      $image = imagecreatefromjpeg($file) ; 
      imagecopyresampled($tn, $image, 0, 0, 0, 0, $width, $height, $width, $height) ; 

      imagejpeg($tn, $save, 100) ; 

      $save = "images/sml_" . $imagepath; //This is the new file you saving 
      $file = "images/" . $imagepath; //This is the original file 

      list($width, $height) = getimagesize($file) ; 

      $modwidth = 130; 

      $diff = $width/$modwidth; 

      $modheight = 185; 
      $tn = imagecreatetruecolor($modwidth, $modheight) ; 
      $image = imagecreatefromjpeg($file) ; 
      imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height) ; 

      imagejpeg($tn, $save, 100) ; 
     echo "Large image: <img src='images/".$imagepath."'><br>"; 
     echo "Thumbnail: <img src='images/sml_".$imagepath."'>"; 

     } 
    } ?> 

請點我在正確的方向...謝謝

回答

13

不要通過100質量爲imagejpeg() - 任何超過90一般是矯枉過正,只是讓你一個更大的JPEG。對於縮略圖,嘗試75並向下工作,直到質量/尺寸折衷可接受。

//try this 
imagejpeg($tn, $save, 75) ; 
+1

此查找圖像的服務器位置。但我想從本地圖像調整大小並上傳 – logan 2014-03-09 12:09:18

2

75是默認的質量設置,但是如果您使用它,您會注意到質量顯着降低。 90爲您提供了極佳的圖像質量,並將文件大小減少了一半,如果您想減小文件大小甚至更多地使用85或80,但沒有那麼大。

1

如果使用jpeg,使用75和85之間的質量通常比可接受的要多(而且100佔用太多空間,對於不重要的增益,btw),至少對於照片來說。

一點題外話,如果你正在處理的屏幕截圖,使用PNG可能讓你更好的質量:JPEG會降低圖像(這是對照片相當不錯,但對於屏幕截圖,與通過像素繪製的字體,它可以帶來一些不好看的效果)

2

它應該是60,它代表60%。

例如: 如果您在Photoshop中打開圖像並嘗試將其保存爲網頁並選擇jpg,則可以看到使用60後仍然保持高質量,但文件較小。如果你想要更低,更多的退化,這意味着顏色扭曲更多。

超過60不會給你更好的東西,只有更大的文件大小。

這是標準的網絡圖像優化。保持高質量,但保持文件的大小盡可能低。

3

你好@halocursed我只是嘗試壓縮使用你的代碼爲不同的圖像類型像PNG和GIF比圖像變黑。所以,我修改了代碼塊並且很好地爲jpg,png工作。

<?php 
    if(isset($_POST['submit'])){ 
     if (isset ($_FILES['new_image'])){ 
      // print_r($_FILES); die; 
      $imagename = $_FILES['new_image']['name']; 
      $source = $_FILES['new_image']['tmp_name']; 
      $target = "images/".$imagename; 
      move_uploaded_file($source, $target); 

      $imagepath = $imagename; 
      $save = "images/" . $imagepath; //This is the new file you saving 
      $file = "images/" . $imagepath; //This is the original file 

      list($width, $height) = getimagesize($file); 

      $tn = imagecreatetruecolor($width, $height); 

      //$image = imagecreatefromjpeg($file); 
      $info = getimagesize($target); 
      if ($info['mime'] == 'image/jpeg'){ 
      $image = imagecreatefromjpeg($file); 
      }elseif ($info['mime'] == 'image/gif'){ 
      $image = imagecreatefromgif($file); 
      }elseif ($info['mime'] == 'image/png'){ 
      $image = imagecreatefrompng($file); 
      } 

      imagecopyresampled($tn, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
      imagejpeg($tn, $save, 60); 

      echo "Large image: ".$imagepath; 

     } 
    } 
?>