1

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

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

我写了一段似乎可以工作的代码,但是当有很多图像时,它在性能方面似乎效果不佳,因为它会逐步减少 10% 的大小 -直到结果在可接受的范围内。

有任何想法吗?先感谢您。

4

3 回答 3

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));
?>
于 2011-05-08T20:58:17.740 回答
2

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

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

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

于 2011-05-08T20:36:16.893 回答
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>
于 2011-05-08T20:35:49.577 回答