# 尺寸計算

本頁說明 `GetNewSize` 如何依 `s`、`w`、`h` 決定輸出尺寸，以及未帶尺寸參數時的預設縮圖規則。

## 規則

條件由上而下判斷，只套用第一個成立的：

| 條件 | 輸出 |
|---|---|
| `s` 有值 | 短邊縮至 `min(s, 原短邊)`，長邊等比例 |
| `w` 與 `h` 皆有值 | 依 `min(w, 原寬)` 計算縮放比，整張等比例縮放 |
| 只有 `w` | 寬縮至 `min(w, 原寬)`，高等比例 |
| 只有 `h` | 高縮至 `min(h, 原高)`，寬等比例 |
| 皆無，且原圖短邊 > 1024 px | 長邊縮至 1024 px，短邊等比例 |
| 其他 | 維持原尺寸 |

所有規則都不放大原圖。

## 邊界行為

| 情境 | 結果 | 原因 |
|---|---|---|
| `w` 與 `h` 同時指定 | 實際高度為 `原高 × (新寬 ÷ 原寬)`，`h` 不影響輸出 | `Resize` 只接收單一縮放比 `newWidth / originWidth` |
| `s`／`w`／`h` 不是整數 | 維持原尺寸，**不**套用 1024 px 預設 | 參數非空即進入該分支，`strconv.Atoi` 失敗後不再往下判斷 |
| 原圖短邊 ≤ 1024 px 且無尺寸參數 | 原尺寸輸出，仍會轉成 `t` 指定格式 | 預設規則只處理大圖 |

## 範例

以 4000 × 3000 的原圖為例：

| 請求參數 | 輸出尺寸 |
|---|---|
| （無） | 1024 × 768 |
| `s=480` | 640 × 480 |
| `w=800` | 800 × 600 |
| `h=300` | 400 × 300 |
| `w=800&h=200` | 800 × 600 |
| `s=5000` | 4000 × 3000 |
