我有一个PHP脚本,我想在div中显示一些图像,但是对于最大宽度和高度有一些限制。
例如,图像可能具有width = 1000px和height = 600px,但图像的最大宽度和高度不应超过500 px以便适合div。
所以,我想转换尺寸,使图像适合div,但宽度和高度之间的比例保持不变。
示例:图像尺寸:1000x600,最大宽度= 500,最大高度= 400。 尺寸的结果不应该是500x400而是500x300。
我已经编写了一段似乎正在运行的代码,但是当有大量图像时,它似乎在性能方面效果不佳,因为它有点像将大小减小10%的步骤逐步直到结果达到可接受的限制。
有什么想法吗?提前谢谢。
答案 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>