-1

誰かが方程式で私を助けることができますか. 最小幅または高さが 200px になるように画像のサイズを変更したいと思います。したがって、オリジナルが 500 x 300 の場合は 333 x 200 になり、オリジナルが 500 x 900 の場合は 200 x 360 になります。元のサイズのいずれかが 200px より小さい場合、サイズ変更は行われません。

これに関するご意見をいただければ幸いです。私はそれが非常に単純だと確信していますが、うまくいかないようです。

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

どうやら、200px に収まるように最小の辺を持ちたいのですが、アップスケールしないでください。私はこのようなことをします

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の回答を少し短く変更し、比率を 1 回だけ計算するようにしました。

// 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 に答える