restrict v1
This commit is contained in:
@@ -187,3 +187,40 @@
|
||||
| JPEG 4000×3000 (2.3MB) | 18.1 MB | 36.1 MB |
|
||||
| PNG 3000×3000 (33KB) | 36.1 MB | 72.1 MB |
|
||||
→ 正好 2 倍。1C1G 上并发上传大图时这是决定性的。
|
||||
|
||||
## 线上验证通过(2026-10-16 上午)
|
||||
|
||||
脚本:`dev/devcheck-upload.py`(**取代 `dev/devcheck-avatar.py`**),12/12 全通过。
|
||||
|
||||
### ⚠️ 重要纠正:头像路径测不出 EXIF 比例校验缺口
|
||||
头像要求 **1:1 是对称比例** —— EXIF 归一(5/6/7/8 交换宽高)后比例**不变**。
|
||||
所以修没修缺口,头像路径表现完全一样。之前 `devcheck-avatar.py` 那个
|
||||
「1536x512 + ori6」用例**根本测不到点上**(3:1 和 1:3 都不是 1:1,两边都会被拒)。
|
||||
**能触发缺口的是背景 16:9(非对称)**。
|
||||
|
||||
### 核心用例(背景 16:9 + EXIF Orientation=6)
|
||||
像素 1080x1920(竖,比例 0.5625)+ ori6 → 肉眼看到 1920x1080(16:9)
|
||||
- 修复前:按像素判比例,偏差 |0.5625 - 1.7778| = 1.215 >> 0.01 → **被误拒**
|
||||
- 修复后:先交换宽高,偏差 0 → 放行
|
||||
|
||||
### 线上实测数据
|
||||
| 用例 | 输入 | 存盘结果 |
|
||||
|---|---|---|
|
||||
| A 分档头像 | 1600×1600 JPEG 125,865 B | webp (512,512) **1,542 B** |
|
||||
| 背景正向对照 | 1920×1080 JPEG 93,484 B | webp (1920,1080) 7,582 B |
|
||||
| **背景 EXIF ori6** | 1080×1920 JPEG 138,842 B | webp (1920,1080) 9,900 B |
|
||||
| 反向用例 | 1080×1920 无 EXIF | **被 16:9 校验拒绝** ✅ 未把校验放宽 |
|
||||
|
||||
### 像素级方向验证(尺寸对≠ 方向对)
|
||||
与 **Pillow `ImageOps.exif_transpose` 作黄金标准**比「红色标记条包围盒」:
|
||||
```
|
||||
黄金标准(Pillow exif_transpose) 红条bbox=(0, 0, 1916, 88) -> 顶部
|
||||
线上存盘(本项目 WebP) 红条bbox=(0, 0, 1916, 88) -> 顶部
|
||||
```
|
||||
**完全一致** → 方向归一正确。这条已固化进脚本(`redness_bbox()` + 一条断言)。
|
||||
|
||||
### 踩坑
|
||||
- 用「上下左右取平均亮度」判断红条位置**不可靠**:采样带(H//10=108px)比红条本身
|
||||
(w//12=90px)还宽,红色被稀释成背景色 → 误判「方向未归一」。
|
||||
正确做法是**按颜色阈值 r>150&&g<90&&b<90 定位像素包围盒**。
|
||||
- 排查时**必须先建立黄金标准**再判定「我实现错了」,否则会去改本来正确的代码。
|
||||
|
||||
Reference in New Issue
Block a user