非常に頻繁にネストされているため、実際の単純なタスクにはかなり巨大なスクリプトがあります。それが何をするかはこれです:
- 画像の現在のサイズを取得する
- 新しい最大次元を取得します
- 画像のサイズを変更する寸法を計算します (アスペクト比は常に維持されます)。
- 画像が新しいサイズよりも小さい場合: 元のサイズを維持
- 最大の新しい次元に x 値と y 値がある場合: 両方の値に合わせて画像をスケーリングします
- 最大の新しい次元が x 値のみを持つ場合: 少なくとも x に収まるようにスケーリングします。
- 最大の新しい次元が y 値のみを持つ場合: 少なくとも y に合うようにスケーリングします
これはスクリプトです:
//example values, whereas 'new' is the maximum range for the new image
$dimensions = array(1920,1200);
$dimensionsNew = array(160, 0);
// percentage the image must be scaled
$percentages = array(0,0);
//calculate scale range
if ($dimensionsNew[0] != 0) $percentages[0] = $dimensions[0] / $dimensionsNew[0];
if ($dimensionsNew[1] != 0) $percentages[1] = $dimensions[1] / $dimensionsNew[1];
//get new dimensions
if ( ($dimensions[0] <= $dimensionsNew[0]) && ($dimensions[1] <= $dimensionsNew[1]) ) {
$dimensionsNew[0] = $dimensions[0];
$dimensionsNew[1] = $dimensions[1];
} elseif ($dimensionsNew[0] == 0) {
if ($dimensions[1] <= $dimensionsNew[1]) {
$dimensionsNew[0] = $dimensions[0];
$dimensionsNew[1] = $dimensions[1];
} else {
$dimensionsNew[0] = ceil($dimensions[0] / $percentages[1]);
}
} elseif ($dimensionsNew[1] == 0) {
if ($dimensions[0] <= $dimensionsNew[0]) {
$dimensionsNew[0] = $dimensions[0];
$dimensionsNew[1] = $dimensions[1];
} else {
$dimensionsNew[1] = ceil($dimensions[1] / $percentages[0]);
}
} elseif ($percentages[0] < $percentages[1]) {
$dimensionsNew[1] = ceil($dimensions[1] / $percentages[1]);
} else {
$dimensionsNew[0] = ceil($dimensions[0] / $percentages[0]);
}
それはすべきことをします。しかし、これを行う簡単な方法はありますか?このコードを頻繁に見すぎて、最適化する方法が見つからないと思います。