10 KiB
10 KiB
暗金荒野主题资产切片研究
生成时间:2026-07-17T16:41:28+08:00
输入资产
- 背景图:
sessions/_attachments/094d7907-875d-41f4-9985-992c87c9b9cc.webp - 图标板:
sessions/_attachments/43bd9ed6-2ba6-4c9d-bd9d-25b068cb4711.webp - 完整界面参考:
sessions/_attachments/f01c1388-b603-434a-b226-2ff5771d4925.webp
三张图尺寸均为 1672x941,格式为 RGB WebP,无 alpha 通道。
坐标约定:本文所有裁剪框均使用 [x, y, w, h],其中 x+w / y+h 是右边界 / 下边界的排他坐标。由于源图是有损 WebP,边缘估算建议按 ±3px 处理;真正导出时可再外扩 2-4px 做抗锯齿和阴影保留。
背景图定位与遮罩建议
视觉结构
- 左侧
x=0-740是较干净的暗色烟雾区,适合承载侧边栏、搜索框、会话列表和中左侧主内容。 - 右侧
x=920-1560, y=80-760是人物、法阵和权杖主体,视觉权重高,不适合直接压大段正文。 - 下方
y=780-941有烟尘、碎石和暗部,可放输入框,但输入框自身需要较实的半透明面板。 - 背景平均亮度很低,左侧安全区采样亮度约
22/255,右侧人物区约38/255;遮罩目标不是继续压暗整图,而是稳定文本和边框对比。
推荐 CSS
桌面端推荐保留人物在右中部,同时让左侧和主聊天区域更稳:
.theme-gilded-wasteland {
position: relative;
min-height: 100vh;
color: var(--gilded-text);
background-color: #050707;
overflow: hidden;
}
.theme-gilded-wasteland::before {
content: "";
position: fixed;
inset: 0;
z-index: -2;
background-image: url("/assets/theme/gilded-wasteland/background.webp");
background-size: cover;
background-position: 62% 50%;
background-repeat: no-repeat;
}
.theme-gilded-wasteland::after {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
background:
linear-gradient(
90deg,
rgba(4, 6, 6, 0.94) 0%,
rgba(4, 6, 6, 0.86) 18%,
rgba(4, 6, 6, 0.58) 48%,
rgba(4, 6, 6, 0.30) 70%,
rgba(4, 6, 6, 0.62) 100%
),
linear-gradient(
180deg,
rgba(0, 0, 0, 0.40) 0%,
rgba(0, 0, 0, 0.08) 24%,
rgba(0, 0, 0, 0.16) 70%,
rgba(0, 0, 0, 0.70) 100%
),
radial-gradient(
ellipse at 74% 34%,
rgba(216, 168, 92, 0.12) 0%,
rgba(216, 168, 92, 0.04) 22%,
transparent 42%
);
}
@media (max-width: 720px) {
.theme-gilded-wasteland::before {
background-position: 70% 50%;
}
.theme-gilded-wasteland::after {
background:
linear-gradient(90deg, rgba(4, 6, 6, 0.92), rgba(4, 6, 6, 0.76)),
linear-gradient(180deg, rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0.72));
}
}
定位取值
- 常规桌面:
background-position: 62% 50%,人物仍在右侧,左中区域更可读。 - 参考图同尺寸复刻:
background-position: center center也可用,因为参考图本身没有裁切。 - 侧边栏更宽或主面板偏左时:可调到
64% 50%,避免人物头部过早进入主消息卡片。 - 移动端:建议
70% 50%并提高遮罩不透明度,优先保证内容可读。
图标板网格边界
图标板不是透明 sprite,而是「暗色背景 + 金色边框 + 标题 + 三规格图标 + 尺寸标签」的展示板。建议把它作为切片源,不要直接拿整板做 CSS sprite。
列边界
| 列 | x0 | x1 | 宽度 |
|---|---|---|---|
| C1 | 50 | 295 | 245 |
| C2 | 315 | 562 | 247 |
| C3 | 582 | 829 | 247 |
| C4 | 846 | 1092 | 246 |
| C5 | 1111 | 1358 | 247 |
| C6 | 1377 | 1621 | 244 |
行边界
| 行 | y0 | y1 | 高度 |
|---|---|---|---|
| R1 | 50 | 187 | 137 |
| R2 | 201 | 339 | 138 |
| R3 | 354 | 490 | 136 |
| R4 | 506 | 641 | 135 |
| R5 | 655 | 786 | 131 |
| R6 | 798 | 927 | 129 |
卡片矩阵
| 卡片 | 名称 | 整卡裁剪框 [x,y,w,h] |
|---|---|---|
| R1C1 | new chat | [50,50,245,137] |
| R1C2 | dropdown | [315,50,247,137] |
| R1C3 | search | [582,50,247,137] |
| R1C4 | shortcut | [846,50,246,137] |
| R1C5 | collapse / expand | [1111,50,247,137] |
| R1C6 | add (circle) | [1377,50,244,137] |
| R2C1 | theme / star | [50,201,245,138] |
| R2C2 | ai swirl | [315,201,247,138] |
| R2C3 | status (online) | [582,201,247,138] |
| R2C4 | loading | [846,201,246,138] |
| R2C5 | attachment | [1111,201,247,138] |
| R2C6 | send | [1377,201,244,138] |
| R3C1 | stop | [50,354,245,136] |
| R3C2 | settings | [315,354,247,136] |
| R3C3 | user / profile | [582,354,247,136] |
| R3C4 | terminal / prompt | [846,354,246,136] |
| R3C5 | copy | [1111,354,247,136] |
| R3C6 | delete | [1377,354,244,136] |
| R4C1 | refresh | [50,506,245,135] |
| R4C2 | folder | [315,506,247,135] |
| R4C3 | chat bubble | [582,506,247,135] |
| R4C4 | notification | [846,506,246,135] |
| R4C5 | upload | [1111,506,247,135] |
| R4C6 | download | [1377,506,244,135] |
| R5C1 | info | [50,655,245,131] |
| R5C2 | warning | [315,655,247,131] |
| R5C3 | close | [582,655,247,131] |
| R5C4 | check | [846,655,246,131] |
| R5C5 | lock | [1111,655,247,131] |
| R5C6 | eye / visibility | [1377,655,244,131] |
| R6C1 | fullscreen | [50,798,245,129] |
常用图标推荐裁剪框
默认建议切 32px 规格,因为它能向下缩放到 24px / 16px,且保留更多金属高光和阴影。下表是「图标主体裁剪框」,不包含卡片标题、尺寸标签和外框。
| 图标语义 | 来源卡片 | 32px 主体框 [x,y,w,h] |
备注 |
|---|---|---|---|
| new chat | R1C1 | [204,85,69,65] |
十字星形,外扩较多以保留长尖角 |
| search | R1C3 | [746,86,62,62] |
放大镜手柄在右下,透明化时保留阴影 |
| dropdown | R1C2 | [480,98,59,45] |
三角图标高度较小,可居中放入 32px 容器 |
| theme / star | R2C1 | [204,236,70,65] |
星芒很长,不建议再紧缩 |
| ai swirl | R2C2 | [476,236,65,65] |
旋涡近似正方形 |
| status / online | R2C3 | [749,242,53,53] |
需要把绿色填充计入 mask |
| attachment | R2C5 | [1277,236,49,60] |
回形针纵向更高,容器内垂直居中 |
| send | R2C6 | [1533,237,63,57] |
纸飞机尖角在右上 |
| stop | R3C1 | [211,392,56,56] |
方形停止按钮 |
| settings | R3C2 | [476,389,65,62] |
齿轮外齿需要保留 |
| user / profile | R3C3 | [743,389,65,62] |
头像圆框 |
| terminal / prompt | R3C4 | [1009,393,59,55] |
矩形外框有阴影 |
| copy | R3C5 | [1278,392,48,56] |
双页图标偏窄 |
| refresh | R4C1 | [211,541,57,57] |
圆箭头 |
| chat bubble | R4C3 | [745,541,62,55] |
气泡尾巴在左下 |
| close | R5C3 | [749,690,53,53] |
X 形,适合放入 32px 方形容器 |
| check | R5C4 | [1010,693,56,47] |
勾号高度较小,容器内垂直居中 |
16px / 24px / 32px 自动裁剪规则
整卡内三个规格的位置基本稳定,推荐通过卡片边界自动切,而不是手工维护所有坐标。
- 先按上文卡片矩阵定位目标卡片。
- 在卡片内部建立三个横向检测带:
16px: [card.x + 18, card.x + 70]
24px: [card.x + 82, card.x + 145]
32px: [card.x + 152, card.x + card.w - 20]
- 纵向检测带取:
[card.y + 35, min(card.y + card.h - 35, card.y + 100)]
- 对检测带内像素建立图标 mask:
gold = r > 75 && g > 48 && b < 90 && r >= g - 8 && r - b > 22
pale = r > 135 && g > 105 && b < 95 && r - b > 35
green = g > 70 && r < 95 && b < 80 && g - r > 8
mask = gold || pale || green
- 对 mask 像素取最小外接矩形,再外扩
4px得到主体裁剪框。 - 如果要导出统一尺寸图标,把主体框透明化后放入固定画布:
| 源规格 | 推荐输出画布 | 用途 |
|---|---|---|
| 16px | 20x20 或 24x24 |
列表小图标、状态点 |
| 24px | 32x32 |
常规按钮 |
| 32px | 40x40 或 48x48 |
主操作按钮、头像旁标识 |
自动检测边界算法
卡片边界可以用金色边缘峰值检测自动恢复,适合后续批量生成 manifest。
1. 读取 RGB WebP。
2. 计算相邻像素梯度:
edge = abs(r-r0) + abs(g-g0) + abs(b-b0)
3. 对 edge > 18 的像素分别累加到 x/y 投影。
4. 对投影做半径 1-2px 的平滑。
5. 在 x 轴选取强峰并按宽度 239-247px 配对,得到左右边界:
[50,295], [315,562], [582,829], [846,1092], [1111,1358], [1377,1621]
6. 在 y 轴选取强峰并按高度 129-138px 配对,得到上下边界:
[50,187], [201,339], [354,490], [506,641], [655,786], [798,927]
7. 用卡片位置矩阵给每个 cell 赋语义标签。
8. 在 cell 内按 16/24/32 检测带取主体 mask 外接框。
透明化与输出格式方案
图标透明化
源图标板是 RGB WebP,背景和图标都已经混合压缩,不能直接得到完美 alpha。推荐流程:
- 从图标板按主体框裁剪,裁剪时外扩
2-4px。 - 从裁剪框边缘做暗背景 flood-fill,把与边缘连通且亮度低、饱和度低的区域标记为背景。
- 对非背景像素按亮度和色相生成 alpha:
- 金色 / 浅金高光:保留。
- 绿色状态图标:单独保留,避免被金色阈值漏掉。
- 暗色压缩噪点:alpha 压低到
0。
- 对 alpha 做轻微
1px羽化,减少 WebP 黑边。 - 把图标居中放入统一画布,按钮内再用 CSS 控制
width/height。
建议保留一份 manifest,记录源图、源框和输出文件名,后续可重复生成:
{
"search": {
"source": "43bd9ed6-2ba6-4c9d-bd9d-25b068cb4711.webp",
"card": "R1C3",
"variant": "32px",
"bbox": [746, 86, 62, 62],
"output": "icons/search-32.png"
}
}
输出格式
- 背景:保留 WebP 或转 AVIF/WebP 两套,作为 CSS 背景图,不需要透明通道。
- 图标主格式:透明 PNG。它对 alpha 最稳,适合切片后人工复核和 UI 直接引用。
- 图标 Web 优化:可额外导出 lossless WebP,使用
image-set()或构建工具按浏览器能力选择。 - 不建议:直接用原始图标板做 CSS sprite。它包含展示卡片、标题、尺寸标签和暗纹理背景,透明化与 hover/filter 都会困难。
质量检查点
- 用深色、浅色、半透明按钮背景分别检查黑边。
- 对
status / online单独检查绿色中心是否完整。 - 对
new chat、theme / star、send检查尖角是否被裁掉。 - 对
dropdown、check这类非方形图标,导出后应放入统一画布居中,而不是强行拉伸。