feat(ux): 图片选图即压缩,上传体积从 MB 级降到 KB 级
服务端早已把静态图转 WebP、长边限 1600(storage.GeneralEncodeSpec),但上传这一跳 发生在压缩之前:手机拍的 4~8MB 照片要先原样传完才能被缩小,移动网络 1~2 Mbps 下 要等几十秒,超过 5MB 校验的直接被拒、连写好的正文一起丢。 现在选图后先在浏览器内压缩,再随表单上传: - canvas → WebP,长边 1600、质量 0.8(与服务端同档),一张照片通常降到 200~400KB - createImageBitmap + imageOrientation:from-image 摆正 EXIF,老浏览器回退不带选项 - submit capture 兜底:选图立刻提交时先等压缩完成再真正 submit 三条安全边界(缺一不可,否则会「压出比原图更差的结果」): - GIF/SVG 跳过:canvas 会把 GIF 画成静止首帧、SVG 栅格化 - 压完不到原体积 85% 退回原图:已优化小图重编码反而更大 - 透明 PNG 优先 WebP(支持 alpha),不支持 WebP 编码时退回 PNG 而非 JPEG(否则透明变黑) 实测(WSL headless Chromium + CDP):4.6MB PNG → 11.7KB WebP(0.3%), 小图原样保留、GIF 跳过。 顺带加 dev/sync-wsl.sh:把同步脚本里 rsync --delete 误删目标机 conf/app.ini 的坑 固化掉(该文件含 DB 密码与对象存储密钥,不在源目录里,必须 exclude)。
This commit is contained in:
@@ -45,3 +45,8 @@ __pycache__/
|
||||
# 本地凭据与一次性状态(测试账号密码等),只留在本机,不进版本库。
|
||||
# 目录说明见 .workbuddy/local/test-accounts.md 的抬头注释。
|
||||
/.workbuddy/local/
|
||||
|
||||
# WSL 测试环境的 app.ini 模板:含数据库密码与对象存储密钥,绝不能进版本库。
|
||||
# 用法见 dev/sync-wsl.sh(同步时必须排除 conf/app.ini,否则会被 rsync --delete 删掉)。
|
||||
/dev/wsl-app.ini
|
||||
/dev/_*.py
|
||||
|
||||
Reference in New Issue
Block a user