2013-05-14 63 views
0

我有一個網站,我想上傳圖片並調整大小,因爲我必須將其放入具有特定尺寸的div。在PHP中找到新圖像的比例尺寸

例如我的最大寬度爲200像素,最大高度爲100像素

我要上傳的圖片,並檢查寬度和高度,如果它們比最大寬度或最大高度我想更大找到圖像的大小以保留在該div內。

如何按比例調整圖像大小? 我只是想找到我的div基地新寬度和新的高度爲200px * 100px的

這是我的腳本:

  if(move_uploaded_file($tmp, $path.$actual_image_name)) 
      { 
       list($width, $height, $type, $attr) = getimagesize($tmp); 
       if($width>200){ 
        //too large I want to resize 
       } 
       if($height>100){ 
        //too height I want to resize 
       } 
       echo(base_url().$path.$actual_image_name); 
      } 
+0

你在問數學問題嗎?你想知道如何計算比率? – George 2013-05-14 07:40:33

+0

我會推薦使用jQuery來調整圖像大小......這會在你的服務器上做很多工作......我的意思是可以有一張圖片,但如果你有更多的圖片怎麼辦...... – 2013-05-14 07:40:37

+0

我無法使用jQuery在這種情況下,因爲我必須在不同的模式下管理這個圖像@ user123_456 – 2013-05-14 07:41:18

回答

1

您可以使用下面的函數保持一個邊框內。 EG 200x200。只需發送文件位置和最大寬度和高度即可。它將返回一個數組,其中$ar[0]是新的寬度,而$ar[1]是新的高度。

它的全部寫出來,所以你可以理解數學。

<?php 
function returnSize($maxW,$maxH,$img) { 
    $maxW = ($maxW>0 && is_numeric($maxW)) ? $maxW : 0; 
    $maxH = ($maxH>0 && is_numeric($maxH)) ? $maxH : 0; 

    // File and new size 
    if (!file_exists($img)) { 
     $size[0]=0; 
     $size[1]=0; 
     return $size; 
    } 

    $size = getimagesize($img); 

    if ($maxW>0 && $maxH>0) { 
     if ($size[0]>$maxW) { 
      $scaleW = $maxW/$size[0]; 
     } else { 
      $scaleW = 1; 
     } 

     if ($size[1]>$maxH) { 
      $scaleH = $maxH/$size[1]; 
     } else { 
      $scaleH = 1; 
     } 

     if ($scaleW > $scaleH) { 
      $fileW = $size[0] * $scaleH; 
      $fileH = $size[1] * $scaleH; 
     } else { 
      $fileW = $size[0] * $scaleW; 
      $fileH = $size[1] * $scaleW; 
     } 

    } else if ($maxW>0) { 
     if ($size[0]>$maxW) { 
      $scaleW = $maxW/$size[0]; 
     } else { 
      $scaleW = 1; 
     } 

     $fileW = $size[0] * $scaleW; 
     $fileH = $size[1] * $scaleW; 

    } else if ($maxH>0) { 
     if ($size[1]>$maxH) { 
      $scaleH = $maxH/$size[1]; 
     } else { 
      $scaleH = 1; 
     } 

     $fileW = $size[0] * $scaleH; 
     $fileH = $size[1] * $scaleH; 

    } else { 
     $fileW = $size[0]; 
     $fileH = $size[1]; 
    } 

    $size[0] = $fileW; 
    $size[1] = $fileH; 

    return $size; 
} 
?> 
+0

偉大的這個功能更清晰的調整大小的數學,我可以做到一切!非常感謝+1 – 2013-05-14 08:19:48

1

這是非常淺鍛鍊的比例集成電路(保持持續的規模):

if($width>200){ 
    $percentage = (200/$width)*100; //Work out percentage 
    $newWidth = 200; // Set new width to max width 
    $newHeight = round($height*$percentage); //Multiply original height by percentage 
} 
else if($height>100){ 
    $percentage = (100/$height)*100; //Work out percentage 
    $newHeight = 100; // Set new height to max height 
    $newWidth = round($width*$percentage); //Multiply original width by percentage 
} 

我以前round(),以確保您收到整隻新維度

+0

感謝這項工作,但我認爲Hugo的功能更好,但感謝您的幫助+1解決方案 – 2013-05-14 08:20:28

+0

請考慮寬度爲800,高度爲200的圖像。現在,第一個if會改變'$ newWidth'和'$ newHeight'的值可以適合(200x50),因爲百分比是25%。但是你的第二個如果將再次改變爲一些沒有的東西。您的'newWidth'值將爲400px(400x100),因爲高度百分比僅爲50%。 – 2013-05-14 08:26:10