Commit Graph
8 Commits
Author SHA1 Message Date
im0o 57538d597c Merge branch 't5-io' into integration 2026-09-04 16:40:48 +08:00
im0o 637635802e Merge branch 't4-sources' into integration 2026-09-04 16:40:47 +08:00
im0o 085b3a56d7 Merge branch 't3-filters' into integration 2026-09-04 16:40:47 +08:00
im0o 2f87a77992 修复滤镜两处问题:type 匹配不再靠 id 拼写、统一边缘格行为
- filters/index.ts 从 build() 实例读出真实 fabric type,导出 FILTER_TYPES 供面板使用
- FilterPanel.vue 改用 FILTER_TYPES[def.id],与注册表 id 命名解耦
- crystallize.ts applyTo2d 不再跳过越界格,越界种子参与取最近并 clamp 采样,与 WebGL 路径一致
2026-09-04 16:39:05 +08:00
im0o 3e41c3fcf7 fix: 预设几何配色压暗降饱和,保证白字可读
- 线性空间限亮度:底色对纯白 WCAG ≥ ~7:1,最亮的强调色也不低于 ~4.9:1,
  任意种子/色相都不会再产出浅亮底(之前空种子的草绿只有 2-3:1)
- 饱和度整体下压、偏中性,不再和白字抢注意力
- 空种子不再共用同一个色相:每种底纹有专属默认色相
  (条纹 215° 蓝 / 噪点 25° 琥珀 / 网格 265° 紫 / 同心弧 350° 玫红)
- 缩略图标签加半透明深色底衬,白字不再直接压在图案上
- 确定性机制、纯函数拆分、三个来源结构均未动
2026-09-04 16:38:05 +08:00
im0o d072067b00 feat: 背景来源——本地上传 / 预设几何 / Unsplash 搜索
SourcePanel 常驻在右栏「背景」一节,三个来源任选:

- 本地上传:文件选择 + 全窗口拖放,转 object URL 装进画布,
  换图与卸载时释放旧的 blob 地址
- 预设几何:四种底纹(斜向圆角条纹 / 噪点渐变 / 网格线 / 同心弧),
  用标题字符串作种子派生配色,同种子像素级确定——纯函数派生+渲染,
  DOM 只留在薄薄一层出口,Node 侧可直接验确定性;色相按前缀分桶,
  同系列标题自动落在相邻色区
- Unsplash 搜索:Access Key 读 VITE_UNSPLASH_KEY,未配置只显示提示、
  另两个来源照常可用;缩略图网格点选装 regular 尺寸;选定即触发
  download 统计(条款义务);署名不画进图,面板上给复制按钮
2026-09-04 16:10:37 +08:00
im0o 9f2b14572d 实现滤镜子系统:六种滤镜注册、晶格化滤镜与滤镜面板
- filters/index.ts 注册模糊/亮度/对比度/饱和度/像素化/晶格化六个滤镜
- crystallize.ts 实现抖动网格 Voronoi 晶格化,WebGL 与 Canvas2D 双路径
- FilterPanel.vue 按注册表自动渲染开关与滑杆,rAF 合帧节流 applyFilters
2026-09-04 16:03:06 +08:00
im0o fa4a7e92f4 feat(io): 导出 WebP/PNG 下载,模板存 localStorage 可加载复用
- export.ts:toBlob 参数纯函数 resolveExportRequest——multiplier 恒为 1,
  画布 backstore 本就是逻辑尺寸,不再乘预览缩放;WebP 带质量、PNG 无损不带
- templates.ts:模板 = canvas.toJSON() + 尺寸,存 localStorage(key 单键数组);
  save/list/delete 可注入 store 便于 Node 侧自检;collectUsedFonts 扫文本对象
  fontFamily(instanceof FabricText + type 名兜底),missingFonts 查缺字
- ExportPanel.vue:格式/质量/文件名/下载;模板保存命名、列表、加载
  (loadFromJSON + setSize 恢复尺寸)、删除(二次确认);加载时若字体列表
  已就绪且模板用了本机没有的字体则提示;字体列表为空(T2 未实现)跳过检查
- selfcheck.ts:bun 直接跑的 Node 断言,覆盖 multiplier、storage 往返、
  usedFonts 收集、缺字体与文件名清洗

浏览器下载、质量滑杆体积、刷新后加载恢复需主控用 Chrome 验
2026-09-04 16:02:28 +08:00