| 格式 | 像素尺寸规则 | 文件内容规则 |
|---|---|---|
| JPEG | 等比缩放,使宽 ≤ 1280 且 高 ≤ 16383(= 2¹⁴−1);未超限则尺寸完全不变 | 总是被重新编码,有质量损失(文件约减半) |
| PNG | 任何尺寸都完全不变(宽、高均不限) | 原样直存,字节数与上传前逐字节相同,透明通道保留 |
额外硬性限制:图片高度 ≤ 29999px,否则上传直接失败(两种格式、两个接口一致,报 system error / invalid image format)。
两个接口(uploadimg 与 add_material)在全部测试中行为完全一致,无差异。
3000×2000、2000×1600、2400×2400、600×4003000×200800×2000(宽 < 1280、高 > 1280,用于判别压缩规则)300×30001280×20001280×854、1281×8551200×20000、1200×26000、1200×29000、1200×29001、1200×29999、1200×30000、600×50000、20000×20media/uploadimg 和 material/add_material 上传。| 原图尺寸 | 格式 | uploadimg 返回 | add_material 返回 |
|---|---|---|---|
| 3000×2000 | JPG | 1280×853 | 1280×853 |
| 3000×2000 | PNG | 3000×2000 | 3000×2000 |
| 3000×200 | JPG | 1280×85 | 1280×85 |
| 3000×200 | PNG | 3000×200 | 3000×200 |
| 800×2000 | JPG | 800×2000(不变) | 800×2000(不变) |
| 800×2000 | PNG | 800×2000 | 800×2000 |
| 300×3000 | JPG | 300×3000(不变) | 300×3000(不变) |
| 300×3000 | PNG | 300×3000 | 300×3000 |
| 1280×2000 | JPG | 1280×2000(不变) | 1280×2000(不变) |
| 1280×2000 | PNG | 1280×2000 | 1280×2000 |
| 1280×854 | JPG | 1280×854(不变) | 1280×854(不变) |
| 1281×855 | JPG | 1280×854 | 1280×854 |
| 2400×2400 | JPG | 1280×1280 | 1280×1280 |
| 2000×1600 | JPG | 1280×1024 | 1280×1024 |
| 600×400 | JPG | 600×400(不变) | 600×400(不变) |
| 1200×20000 | JPG | 983×16383 | 983×16383 |
| 1200×20000 | PNG | 1200×20000(不变) | 1200×20000(不变) |
| 1200×29999 | JPG | 655×16383 | 655×16383 |
| 1200×29999 | PNG | 1200×29999(不变) | 1200×29999(不变) |
| 1200×30000 | JPG/PNG | 上传失败 | 上传失败 |
| 600×50000 | JPG/PNG | 上传失败 | 上传失败 |
| 20000×20 | JPG | 1280×1 | 1280×1 |
| 20000×20 | PNG | 20000×20(不变) | 20000×20(不变) |
(所有 PNG 测试均为原样返回,未逐一列出;JPEG 与 PNG 在两个接口下结果完全相同。)
JPEG 按等比缩放,使图片同时满足两个约束:宽 ≤ 1280、高 ≤ 16383(= 2¹⁴−1)。
scale = min(1, 1280 / 原宽, 16383 / 原高)
输出宽 = round(原宽 × scale)
输出高 = round(原高 × scale)
| 约束 | 触发条件 | 例证 |
|---|---|---|
| 宽 ≤ 1280 | 宽 > 1280 时等比缩到宽 = 1280 | 3000×2000→1280×853;3000×200→1280×85 |
| 高 ≤ 16383 | 高 > 16383 时等比缩到高 = 16383 | 1200×20000→983×16383;1200×29999→655×16383 |
| 两者都超 | 取更小的缩放比例 | 20000×20→1280×1(宽触发) |
要点:
1280×854 原样返回,1281×855 被压为 1280×854。20000×20 缩为 1280×1——高度 1.28 取整为 1;一般比例下误差 ≤ 1px)。600×400(尺寸不变)文件从 11,039 字节变为 5,086 字节;纯色红边 (255,0,0) 变为 (247,0,0)。3000×2000、1200×20000、20000×20)像素尺寸完全不变。system error / invalid image format),两种格式、两个接口一致。1200×29999 成功,1200×30000 失败。1200×29000(3480 万像素)成功,600×50000(3000 万像素)失败——判定只看高度。证伪。 3000×2000 的 PNG 恰好是 600 万像素,上传后既没有变尺寸、也没有变文件字节。该说法与实测结果矛盾,不应作为设计依据。
scale = min(1, 1280 / 原宽, 16383 / 原高)
if scale >= 1 → 尺寸不变
else → 等比缩小,输出宽高按 scale 缩放(向上取整误差 ≤ 1px)
uploadimg ≤ 1MB;add_material ≤ 10MB。sips -g pixelWidth -g pixelHeight(macOS)或 PIL 核对像素尺寸。