php-图像降维算法

php-图像降维算法,php,performance,image,image-scaling,Php,Performance,Image,Image Scaling,我有一个php脚本,希望在div中显示一些图像,但是对于最大宽度和高度有一些限制。 例如,图像的宽度可能为1000px,高度可能为600px,但图像的最大宽度和高度不应超过500px,以适应div。 因此,我想转换尺寸,使图像适合div,但宽度和高度之间的比率保持不变 示例:图像尺寸:1000x600,最大宽度=500,最大高度=400。 尺寸结果不应为500x400,而应为500x300 我已经写了一段代码,看起来很有效,但是当有很多图像时,它的性能似乎不太好,因为它可以一步一步地减小10%的

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

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

我已经写了一段代码,看起来很有效,但是当有很多图像时,它的性能似乎不太好,因为它可以一步一步地减小10%的大小,直到结果达到可接受的极限


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

不太清楚你在问什么

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>
功能比例($x,$y,$maxX,$maxY){
if($x>$maxX)返回数组($maxX,$maxX/$x*$y);
else返回数组($x,$y);
}
...
列表($x,$y)=比例($toScaleX,$toScaleY,$maxX,$maxY);
列表($x,$y)=比例($y,$x,$maxY,$maxX);

不太清楚你在问什么

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>
功能比例($x,$y,$maxX,$maxY){
if($x>$maxX)返回数组($maxX,$maxX/$x*$y);
else返回数组($x,$y);
}
...
列表($x,$y)=比例($toScaleX,$toScaleY,$maxX,$maxY);
列表($x,$y)=比例($y,$x,$maxY,$maxX);

每次用户访问您的页面时,动态调整图像大小不是一个好主意

根据您正在使用的脚本,您需要首先调整所有图像的大小并保存它们,这样您就不会每次有人访问您的页面时都有额外的开销


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

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

根据您正在使用的脚本,您需要首先调整所有图像的大小并保存它们,这样您就不会每次有人访问您的页面时都有额外的开销


显示到目前为止您所拥有的一些代码,也许它可以改进

这最多可以将您的值缩放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));
?>

这最多可将您的值缩放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));
?>


正是我想要的。谢谢正是我想要的。谢谢