Skip to content

Commit af3c1b4

Browse files
committed
feat: 新增水墨、点彩、霓虹、像素四种风格(共 8 种)
每种风格有自己的工序、笔触语言和底纹,不是同一套笔刷换配色。 - 水墨:宣纸底 + 松烟墨色。浓淡靠叠墨(同一色相不同透明度), 笔触宽而短像墨团化开;皴擦刻意压到最疏(水墨讲究疏可走马), 最亮处只轻扫留白。墨色不用纯黑,带一点暖调 - 点彩:六边形错排撒点,原色附近做色相抖动靠眼睛混色。 暗部的点会放大——纸是白的,暗区点太小会从缝里透出白点像满屏噪点 - 霓虹:加色混合(lighter)做辉光,但主体走正常混合, 否则密集区域亮度累加到饱和就成了白纸;亮处目标亮度用正弦收一点, 避免高光区糊成一片白。光晕层只在暗部画 - 像素:先铺大格再补细格,量化到每通道 5 档做调色板感, 格边长由细腻程度控制(往左更清晰、往右更复古) - render.js 新增 DOT / GLOW / PIXEL 三种笔触类型与 ink/dot/neon/pixel 底纹 - 界面支持 8 种风格,细腻程度与分层的说明文案按风格切换
1 parent c87f156 commit af3c1b4

5 files changed

Lines changed: 733 additions & 45 deletions

File tree

‎README.md‎

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
11
# strokeoil · 图片逐笔重绘
22

3-
把任意图片重绘成「一笔一笔画出来」的过程动画,内置 **四种绘画风格**:油画、线描、色块、素描。
3+
把任意图片重绘成「一笔一笔画出来」的过程动画,内置 **八种风格**:油画、线描、色块、素描、水墨、点彩、霓虹、像素。
44
**纯前端实现,图片不上传、无需后端**,可直接托管到 GitHub Pages。
55

66
仓库:<https://github.com/tyuecode/tyuecode.github.io>
77

88
在线体验:<https://tangyue.me/>
99

10-
## 四种风格
10+
## 八种风格
1111

12-
| 风格 | 工序 | 效果 | 适合 |
13-
|---|---|---|---|
14-
| **油画** | 刷底色 → 起稿 → 单色底层 → 铺大色 → 塑造 → 塑形 → 罩染 → 干扫 → 细部 → 提白 | 十道古典工序,笔触有起收锋、笔毛分叉、颜料渐枯、厚涂浮雕、罩染透叠 | 人像、风景,想要「真在画画」的质感 |
15-
| **线描** | 定形 → 勾主线 → 结构线 → 细描 → 点睛 | 近黑底上的细白线,只勾结构不铺色,像版画稿/工程图 | 线条为主的原图、想要高对比的图 |
16-
| **色块** | 铺底色 → 暗部色块 → 中间调 → 亮部 → 点缀 | k-means 分层后逐层平涂硬边色块,限量配色的海报感 | 扁平/插画风,做海报和封面 |
17-
| **素描** | 起形 → 铺调子 → 排线 → 交叉线 → 提亮 | 纸底石墨排线,顺结构走向,暗部交叉线压深 | 想要手绘草稿感、练习用的稿子 |
12+
| 风格 | 工序 | 效果 |
13+
|---|---|---|
14+
| **油画** | 刷底色 → 起稿 → 单色底层 → 铺大色 → 塑造 → 塑形 → 罩染 → 干扫 → 细部 → 提白 | 十道古典工序,起收锋、笔毛分叉、颜料渐枯、厚涂浮雕、罩染透叠 |
15+
| **线描** | 定形 → 勾主线 → 结构线 → 细描 → 点睛 | 近黑底上的细白线,只勾结构,像版画稿 |
16+
| **色块** | 铺底色 → 暗部色块 → 中间调 → 亮部 → 点缀 | 分层平涂的硬边色块,限量配色的海报感 |
17+
| **素描** | 起形 → 铺调子 → 排线 → 交叉线 → 提亮 | 纸底石墨排线,顺结构走向,暗部交叉线压深 |
18+
| **水墨** | 铺水 → 勾线 → 渲染 → 皴擦 → 点苔 → 留白 | 宣纸墨色,浓淡枯湿靠叠墨,留白透气 |
19+
| **点彩** | 底色 → 中层 → 密集 → 边界 → 高光 | 密集小色点堆成画面,颜色靠视觉混色 |
20+
| **霓虹** | 铺底 → 主线 → 细线 → 光晕 → 亮点 | 深底发光线条,像通电的招牌 |
21+
| **像素** | 低分辨率 → 中分辨率 → 细化 → 高光格 | 量化成方格逐格点亮,复古游戏感 |
1822

1923
每种风格都有自己的一套工序、笔触语言和底纹,**不是同一套笔刷换配色**:
20-
线描的线是贴着 Canny 脊线吸附出来的,色块是把分层区域用 marching squares 抽成轮廓直接填充,
21-
素描的排线按局部明暗分四遍逐层压深。三种的笔触数据结构也各不相同(线 / 闭合填充 / 排线)。
24+
线描的线贴着 Canny 脊线吸附;色块把分层区域抽成轮廓直接填充;素描按明暗分四遍排线;
25+
水墨用叠墨做浓淡、把纹理压到最疏;点彩是六边形错排撒点、暗部点更大以免白纸透出;
26+
霓虹用加色混合做辉光但主体走正常混合(否则密集处会叠成白);像素先铺大格再补细格。
2227

2328
## 特点
2429

25-
- 🎨 **四种风格**:油画 / 线描 / 色块 / 素描,各有一套工序和笔触语言
30+
- 🎨 **八种风格**:油画 / 线描 / 色块 / 素描 / 水墨 / 点彩 / 霓虹 / 像素,各有一套工序和笔触语言
2631
- 🖌 **物理笔触**:起收锋、笔毛分叉、颜料渐枯、厚涂浮雕、罩染透叠
2732
- 🔒 **本地处理**:图片只在你的浏览器里,绝不联网上传
2833
- 📦 **可下载**:生成结果打包成单个 HTML 文件,双击离线播放、随意分享
@@ -43,7 +48,7 @@
4348
| 文件 | 说明 |
4449
|---|---|
4550
| `index.html` | 主页面(上传、选风格、调参、实时预览、下载) |
46-
| `core.js` | 分析 + 四种风格的笔触生成 + 时间轴 |
51+
| `core.js` | 分析 + 八种风格的笔触生成 + 时间轴 |
4752
| `render.js` | 共用的笔触渲染器(网页预览与播放器共用,保证所见即所得) |
4853
| `worker.js` | Web Worker,后台生成不卡界面 |
4954
| `player-template.html` | 下载用的单文件播放器模板(内联 `render.js`) |
@@ -74,14 +79,14 @@ window.OIL_BUILD = '20261111-4style';
7479

7580
## 技术实现
7681

77-
**分析一次,四种风格共用。** 先在降采样后的工作分辨率上算一张「结构图」:
82+
**分析一次,八种风格共用。** 先在降采样后的工作分辨率上算一张「结构图」:
7883

7984
1. **分层**:在 L\*(亮度)× S(饱和度)平面上做 k-means(k-means++ 初始化),把画面按材质和明暗分开
8085
2. **边缘**:两套 Canny(粗 σ=3.0 出主要轮廓,细 σ=1.2 出细节边缘),双阈值 + 滞后连接
8186
3. **方向场**:结构张量(Sobel → 特征分解)求每个像素的主导走向;平坦区改用低频方向场,避免笔触乱指
8287
4. **显著性**:梯度幅值 + 方向一致性 + 细边缘密度加权,告诉笔触「哪里值得多画几笔」
8388

84-
四种风格从同一张结构图出发,各取所需:
89+
八种风格从同一张结构图出发,各取所需:
8590

8691
- **油画**:网格播种 → 沿方向场行走 → 按显著性分配笔宽和密度,七道工序逐层加细
8792
- **线描**:种子只撒在 Canny 脊线上,行走时向法线方向吸附(`requireEdge`),走偏即止;用 `maxTurn` 限制转角,防止笔画打卷成毛线团

‎build.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
* 解决办法:所有脚本引用都带上 ?v=BUILD 查询串,每次发布改 BUILD 值即可
88
* 让浏览器当成全新 URL 去取。这里集中管理,避免各处漏改。
99
*/
10-
window.OIL_BUILD = '20261111-spreadfix';
10+
window.OIL_BUILD = '20261111-8styles';

0 commit comments

Comments
 (0)