-1

有人可以帮我算一个方程式吗?我想缩小图像的大小,使其最小宽度或高度为 200 像素。所以,如果原件是 500 x 300,它最终会是 333 x 200,如果原件是 500 x 900,它最终会是 200 x 360,依此类推。如果任一原始尺寸小于 200 像素,则不会调整大小。

我很感激对此的任何意见。我确信它很简单,我似乎无法解决它。

4

4 回答 4

3

你只需要计算出现有的图像比例并从中进行数学计算。该比率是图像宽度与高度的比较,反之亦然(通常较长的除以较短的,得到的比率 >= 1)。例如,宽度 450 和高度 300 的宽度比为 1.5。这意味着图像的宽度是其高度的 1.5 倍。然后,您可以将“最小”值乘以比率以获得其他尺寸,或者如示例中所示,如果您的身高为 200,则另一侧将是最小 * 比率或 200 * 1.5,这使得尺寸为 300 宽和 200 高。

$height = 500;
$width = 300;
$min = 200;
if($width > $height){
    $ratio = $width/$height;
    $height = $min;
    $width = round($min * $ratio);
} else  {
    $ratio = $height/$width;
    $width = $min;
    $height = round($min * $ratio);
}

echo "Width: $width<br>";
echo "Height: $height<br>";

http://codepad.viper-7.com/RsxAsC

于 2013-01-28T23:59:41.817 回答
1

显然,您希望最小的一面适合 200 像素,但不要放大。我会做这样的事情

if ($width > 200 || $height > 200) {
     if ($width > $height) {
          $ratio = (200 / $height);
     } else {
          $ratio = (200 / $width);
     }

     $resizedWidth = $ratio * $width;
     $resizedHeight = $ratio * $height;
}

代码不完整,只是一个起点,希望对您有所帮助

于 2013-01-29T00:06:53.970 回答
1

如果你的服务器安装了 php imagick 扩展,你可以使用函数cropThumbnailImage()

http://php.net/manual/en/imagick.cropthumbnailimage.php

于 2013-01-29T05:38:22.527 回答
1

我将Jonahtan的答案改得更短一些,并且您只计算一次比率:

// Set image dimensions for testing
$imgWidth = 100;
$imgHeight = 250;

// Minimal dimension requirements 
$minDim = 300;

if ($imgWidth < $minDim || $imgHeight < $minDim) {
    $ratio = $imgWidth / $imgHeight;
    if( $ratio > 1) {   // Width is greater
        $imgHeight = $minDim;
        $imgWidth = round($minDim * $ratio);
    }
    else {  // Height is greater
        $imgWidth = $minDim;
        $imgHeight = round($minDim / $ratio);
    }
}

echo "Width: $imgWidth<br>";
echo "Height: $imgHeight<br>";
于 2019-04-16T10:55:13.977 回答