誰かが方程式で私を助けることができますか. 最小幅または高さが 200px になるように画像のサイズを変更したいと思います。したがって、オリジナルが 500 x 300 の場合は 333 x 200 になり、オリジナルが 500 x 900 の場合は 200 x 360 になります。元のサイズのいずれかが 200px より小さい場合、サイズ変更は行われません。
これに関するご意見をいただければ幸いです。私はそれが非常に単純だと確信していますが、うまくいかないようです。
誰かが方程式で私を助けることができますか. 最小幅または高さが 200px になるように画像のサイズを変更したいと思います。したがって、オリジナルが 500 x 300 の場合は 333 x 200 になり、オリジナルが 500 x 900 の場合は 200 x 360 になります。元のサイズのいずれかが 200px より小さい場合、サイズ変更は行われません。
これに関するご意見をいただければ幸いです。私はそれが非常に単純だと確信していますが、うまくいかないようです。
既存の画像比率を計算し、そこから計算するだけです。比率は、画像の幅と高さを比較したもの、またはその逆です (通常、長い方を短い方で割って比率 >= 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>";
どうやら、200px に収まるように最小の辺を持ちたいのですが、アップスケールしないでください。私はこのようなことをします
if ($width > 200 || $height > 200) {
if ($width > $height) {
$ratio = (200 / $height);
} else {
$ratio = (200 / $width);
}
$resizedWidth = $ratio * $width;
$resizedHeight = $ratio * $height;
}
完全なコードではなく、出発点にすぎません。これが役立つことを願っています
サーバーにphp imagick拡張機能がインストールされている場合は、関数cropThumbnailImage()を使用できます
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>";