图片重整记录
图片重整记录
2026-09 对博客图片做了一次传输升级:去重、压缩、标准化命名。本文记录做了什么、留下什么规则。
背景
- 图片此前由相机 RAW 直接转 JPG,单张 0.9~1.8MB(3031×2006),网页加载沉重
- 命名混乱:时间戳名(
20230515-*)、相机编号名(DSC*/Cover-DSC*)、语义名三种并存 - 发现 4 对逐字节相同的重复文件:
DSC0047/Cover-DSC0029/39/43(原图)与Cover-elsecode/CPLang/Dev-Env/Blog-Maintenance(当年软链接上传时被物化为文件的副本)
处理内容
去重:删除 4 个物化副本;DSC 原图回归原始命名(去掉 Cover- 前缀,如 Cover-DSC0029.jpg → DSC0029.jpg),原样保留
压缩:基于 DSC 原图及独有封面图,用 sharp 生成 12 个 WebP(限宽 1920px、q80),合计 8922KB → 1159KB(-87%)。原图一律保留,WebP 承接 URL
改名:27 张图片 git mv 语义化(KVM 篇 15 张按 alt 文本命名、WSL 2 张、概率矩阵图 3 张、杂项 7 张),57 个引用文件批量同步,并修复 2 处 URL 编码引用(例1图/例2图 原为编码中文路径)
保留:20230515-084045.jpg(KVM 篇未采用的图,已改名 kvm-vmm-winxp.jpg 存档)、Lua-Logo.svg(Torch 篇未采用的图,已改名 torch-lua-logo.svg 存档)、bookmark.svg(孤儿,暂留)
未处理:正文实例图(WSL_X_envir_window_screenshot.png 952KB、chicken-curry-rice.png 849KB、sgrtestresult.png 583KB 等 8 张 >200KB)暂不压缩——它们只在正文内出现,不影响界面排版,点开正文反正要等。后续要处理时在优化脚本 JOBS 中追加即可
留存的规则
目录:图片统一放 builder/source/img/,由 Git LFS 管理(.gitattributes),构建时原样复制到 public/img/
命名:
| 角色 | 规则 | 示例 |
|---|---|---|
| 相机原图(存档) | 保留相机原始命名 DSCxxx,不加前缀 |
DSC0029.jpg |
| 封面图(URL) | cover-<slug>.webp,全小写 kebab-case |
cover-dev-env.webp |
| 全站背景(URL) | site-background.webp |
site-background.webp |
| 404 页封面(URL) | cover-404.webp |
cover-404.webp |
| 正文插图(URL) | <文章主题>-<描述>.<ext>,描述取自图片内容或 alt 文本 |
kvm-cpu-virtual.jpg |
| SVG 图标 | 保持原语义名,不压缩不改名 | Tux.svg |
要点:一个图片只有两个文件——原图(存档,不参与 URL)+ WebP/改名版(承担 URL);原图不压缩不改名不删除,压缩产物一律新建。
压缩标准:WebP、限宽 1920px(withoutEnlargement)、q80。判定是否值得转:字节/像素密度 0.1 以下(低熵 logo/纯色图)仅改名不压缩;0.5 以上(截图/照片)转 WebP 收益明显。
工具:node builder/bin/optimize-images.js。脚本依赖 sharp,但 CI 构建不需要它,故 sharp 不常驻依赖——需要执行压缩时临时 npm i -D sharp,跑完卸载。任务清单在脚本 JOBS 数组中追加。
新图入库:原图放入 img/ 不改名 → 封面在 JOBS 登记生成 cover-*.webp → 正文插图按规则命名 → front matter 的 cover 字段写 WebP 路径 → 引用变更同步更新 scaffolds/ 模板与 _config.nexmoe.yml 的 background.path。
Knighthana & DeepSeek
2026/09/04