服务端早已把静态图转 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)。
53 lines
1.5 KiB
Plaintext
53 lines
1.5 KiB
Plaintext
# ---> Go
|
|
# If you prefer the allow list template instead of the deny list, see community template:
|
|
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
|
#
|
|
# Binaries for programs and plugins
|
|
*.exe
|
|
*.exe~
|
|
*.dll
|
|
*.so
|
|
*.dylib
|
|
|
|
# Test binary, built with `go test -c`
|
|
*.test
|
|
|
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
|
*.out
|
|
|
|
# Dependency directories (remove the comment below to include it)
|
|
# vendor/
|
|
|
|
# Go workspace file
|
|
go.work
|
|
go.work.sum
|
|
|
|
# env file
|
|
.env
|
|
|
|
# otherfile
|
|
./workbuddy
|
|
./scripts
|
|
# 注意:gitignore 不认 "./" 前缀,/outputs 才是「仓库根下的 outputs」。
|
|
# outputs 里全是 TestGenPreview / 主题生成器 / 截图这类一次性产物,
|
|
# 每次跑都会变,跟版本库无关。
|
|
/outputs/
|
|
|
|
# 蜜罐凭据取证文件:明文账号密码,绝不能进版本库。
|
|
# 默认目录由 [security] honeypot_cred_dir 决定(缺省 data/honeypot-creds),
|
|
# 若改成别的盘外路径则不受这条影响(那本来也不在仓库里)。
|
|
/data/
|
|
|
|
# 主题生成器的自测脚本是 Python:跑一次就会留 __pycache__,别提交。
|
|
__pycache__/
|
|
*.pyc
|
|
|
|
# 本地凭据与一次性状态(测试账号密码等),只留在本机,不进版本库。
|
|
# 目录说明见 .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
|