Logo花火漫画开发文档

图片格式与反爬虫

WebP 格式选型与 /web-res/ 混淆图片机制

图片格式

所有漫画图片统一使用 WebP 格式存储和分发:

  • 体积比 JPEG 小 25-35%,节省存储和带宽成本
  • 支持有损和无损压缩
  • Android 和所有现代浏览器原生支持
  • 上传工具在上架时自动转换为 WebP

文件命名为零填充三位数页码:001.webp002.webp012.webp

反爬虫:混淆图片

/web-res/ 路径下的图片经过网格切片重排处理,是反爬虫的关键机制。

混淆原理

原始图片                    混淆后图片
┌───┬───┬───┬───┐          ┌───┬───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │          │ 9 │ 3 │16 │ 7 │
├───┼───┼───┼───┤          ├───┼───┼───┼───┤
│ 5 │ 6 │ 7 │ 8 │   ───→   │ 2 │14 │ 5 │11 │
├───┼───┼───┼───┤          ├───┼───┼───┼───┤
│ 9 │10 │11 │12 │          │12 │ 6 │ 1 │15 │
├───┼───┼───┼───┤          ├───┼───┼───┼───┤
│13 │14 │15 │16 │          │ 4 │10 │13 │ 8 │
└───┴───┴───┴───┘          └───┴───┴───┴───┘

图片被按 4×4 网格切分为 16 块,然后根据混淆种子(seed)确定性地重排。

还原方式

Edge Function 在签名验证失败时返回 scrambleInfo

{
  "seed": "a1b2c3d4e5f6g7h8",
  "gridX": 4,
  "gridY": 4
}

Web 前端使用 Canvas API 根据 seed 计算每个切片的原始位置,将 16 块重新拼回原图。爬虫因为没有 seed 和还原逻辑,只能得到乱序图片。

同一章节的 seed 是稳定的(基于 chapter_folder + 密钥的哈希),前端可以缓存还原映射表。不同章节的 seed 不同。

混淆资源的生成

混淆版本的图片由上传工具在上架时预生成,与原始图片一起存储在源站上:

{bucket}/
├── res/                    ← 原始图片
│   └── one-piece/ch01/001.webp
└── web-res/                ← 混淆图片(预生成)
    └── one-piece/ch01/001.webp

GoEdge 按路径前缀路由到对应目录,不做任何运行时图片处理。

On this page