Knighthana
文章114
标签154
分类7

文章归档

图片重整记录

图片重整记录

图片重整记录

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.jpgDSC0029.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.ymlbackground.path


Knighthana & DeepSeek

2026/09/04