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