php - 减少图像尺寸算法

时间:2011-05-08 20:22:38

标签: php performance image image-scaling

我有一个PHP脚本,我想在div中显示一些图像,但是对于最大宽度和高度有一些限制。
例如,图像可能具有width = 1000px和height = 600px,但图像的最大宽度和高度不应超过500 px以便适合div。
所以,我想转换尺寸,使图像适合div,但宽度和高度之间的比例保持不变。

示例:图像尺寸:1000x600,最大宽度= 500,最大高度= 400。 尺寸的结果不应该是500x400而是500x300。

我已经编写了一段似乎正在运行的代码,但是当有大量图像时,它似乎在性能方面效果不佳,因为它有点像将大小减小10%的步骤逐步直到结果达到可接受的限制。

有什么想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:4)

这会将您的值最多扩展2倍。

<?php
define('MAX_WIDTH', 500);
define('MAX_HEIGHT', 200);

function scale($w, $h)
{
   $rw = $w; $rh = $h; $factor = 0.0;

   if( $rw > MAX_WIDTH )
   {
        $factor = $rw / MAX_WIDTH;
        $rw = MAX_WIDTH;
        $rh = floor($factor * $rh);
   }
   if( $rh > MAX_HEIGHT )
   {
        $factor = $rh / MAX_HEIGHT;
        $rh = MAX_HEIGHT;
        $rw = floor($factor * $rw);
   }

   return array($rw, $rh);
}
echo explode('x', scale(1000, 500));
?>

答案 1 :(得分:2)

每次用户访问您的网页时动态调整图片大小都不是一个好主意。

根据您使用的脚本like this one,您需要先调整所有图像的大小并保存它们,这样每次有人访问您的页面时都不会产生开销。

显示目前为止的一些代码,也许可以改进

答案 2 :(得分:1)

目前还不太清楚你在问什么。

1)进行了多少缩放?如果不是很多,将它留给CSS可能是个好主意。

2)我认为你使用的是GD或ImageMagick?也许你是在追求这样的事情:

function scale($x,$y,$maxX, $maxY) {
    if ($x > $maxX) return array($maxX, $maxX / $x * $y);
    else return array($x, $y);
}
...
<declare variables $toScaleX, $toScaleY, $maxX, $maxY>
list($x, $y) = scale($toScaleX, $toScaleY, $maxX, $maxY);
list($x, $y) = scale($y, $x, $maxY, $maxX);
<$x, $y, are now the desired dimensions to scale to>