2013-05-14 65 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