2013-02-26 147 views
3
種植

我使用PHP腳本上傳和調整圖像大小,很簡單:調整圖像大小,並用PHP

if($_SERVER["REQUEST_METHOD"] == "POST") { 
    $image = $_FILES["image_upload"]; 
    $uploadedfile = $image['tmp_name']; 

    if ($image) { 
     $filename = stripslashes($_FILES['image_upload']['name']); 
     $extension = getExtension($filename); 
     $extension = strtolower($extension); 
     if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { 
      $error_txt = 'Immagine incoretta'; 
      $errors=1; 
     } else { 
      $size=filesize($uploadedfile); 
      if ($size > MAX_SIZE*1024) { 
       $error_txt = "Immagine troppo grande"; 
       $errors=1; 
      } 
      if($extension=="jpg" || $extension=="jpeg") { 
       $uploadedfile = $uploadedfile; 
       $src = imagecreatefromjpeg($uploadedfile); 
      } else if($extension=="png") { 
       $uploadedfile = $uploadedfile; 
       $src = imagecreatefrompng($uploadedfile); 
      } else { 
       $src = imagecreatefromgif($uploadedfile); 
      } 

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

      $newwidth=500; 
      $newheight=375; 
      $tmp=imagecreatetruecolor($newwidth,$newheight); 



      imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 


      $filename = "images/". generateRandomString(5) . $image['name']; 

      imagejpeg($tmp,$filename,100); 

      imagedestroy($src); 
      imagedestroy($tmp); 
     } 
    } 

我想有一個遠一點,現在我只是調整圖像大小,無論想象中的比例,我想調整它到一個固定的高度,而不會失去原來的比例,這當然是通過裁剪+調整原始圖像的大小來實現的。

我不知道如何做到這一點用我的實際imagecreatetruecolorimagecopyresampled功能,並尋找到PHP手冊看起來是不是很容易。

有一個非常good library我嘗試融入到我的代碼,使用它的那樣簡單mysite.com/lib/timthumb.php?src=castle1.jpg & H = 180 & W = 120但我不知道如何將其與我的實際代碼整合。

那麼,你有什麼建議?

+0

你可以嘗試phpthumb庫,這是一個成熟的項目,而不是在這裏檢查演示:http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php請記住,在服務器中的圖像處理確實會造成一些問題,如佔用CPU,並可能造成嚴重的瓶頸。 – Panagiotis 2013-02-26 14:09:27

+0

有一個很好的教程,用imagecreatetruecolor url調整大小:http://code.tutsplus.com/tutorials/image-resizing-made-easy-with-php--net-10362將幫助您調整大小而不會失去比例。 – 2014-07-05 12:52:26

回答

2

如果在下面的代碼中有任何拼寫錯誤或任何錯誤,請原諒我。我沒有測試過它。我在這裏做的是計算高度還是寬度是太長的比例。然後調整來源尺寸以匹配最終的圖像尺寸。另外,調整縮小的邊的中心,使裁剪的圖像居中。

$newwidth = 500; 
    $newheight = 375; 
    $tmp  = imagecreatetruecolor($newwidth, $newheight); 

    $widthProportion = $width/$newwidth; 
    $heightProportion = $height/$newheight; 

    if ($widthProportion > $heightProportion) { 
     // width proportion is greater than height proportion 
     // figure out adjustment we need to make to width 
     $widthAdjustment = ($width * ($widthProportion - $heightProportion)); 

     // Shrink width to proper proportion 
     $width = $width - $widthAdjustment; 

     $x = 0; // No adjusting height position 
     $y = $y + ($widthAdjustment/2); // Center the adjustment 
    } else { 
     // height proportion is greater than width proportion 
     // figure out adjustment we need to make to width 
     $heightAdjustment = ($height * ($heightProportion - $widthProportion)); 

     // Shrink height to proper proportion 
     $height = $height - $heightAdjustment; 

     $x = $x + ($heightAdjustment/2); // Center the ajustment 
     $y = 0; // No adjusting width position 
    } 

    imagecopyresampled($tmp, $src, 0, 0, $x, $y, $newwidth, $newheight, $width, $height); 

因此,基本上用$ width和$ height變量指定了多少圖片(裁剪)。並用$ x,$ y表示我們想要裁剪圖片的位置。其餘的只是標準的調整大小,以適應全新的形象。

我希望有幫助!

+0

$ x和$ y未定義.. – r3wt 2014-09-01 21:14:02