789 字
4 分钟
Cola Cover - 高效博客封面制工具
2025-01-20

前言#

我美术细胞=0,封面设计我简直难绷,那就科技改变一切

前段时间我发现了 JLinMr/Mini-Cover 这个开源项目,非常阿妹贼,这简约的柑橘非常不错,但是我发现纯色背景和纯色文字过于单调,于是,我花了一些时间对它进行了深度改造,诞生了 Cola-Cover

在线体验Cola Cover

evanfu0110
/
Cola-Cover
Waiting for api.github.com...
00K
0K
0K
Waiting...

成品图 - 图标氛围+智能推荐配色#

ColaCover


核心改造点与技术实现#

这次改造不仅仅是换个 UI,更多的是从算法辅助设计交互体验上进行的升级。

1. 🧠 智能配色 (Smart Color)#

这是 Cola-Cover 最核心的功能。很多时候我们上传了一个 LOGO,却不知道背景该配什么颜色才好看。

实现逻辑:

我引入了颜色分析算法,当用户上传图片时,系统会:

  1. 提取主色调:解析图片像素,通过聚类算法提取出 LOGO 的主色调(Primary)和次色调(Secondary)。
  2. 生成推荐方案
    • 纯色模式:直接推荐提取出的主色和互补色。
    • 渐变模式:基于主色调,自动计算出渐变角度和结束色,生成更有质感的线性渐变。
  3. 文字自适应:利用 YIQ 算法计算背景亮度的感知值,自动判断文字应该用深色还是浅色(如黑/白/金/银),确保可读性。

这样,用户只需要上传一张图,剩下的配色工作全部交给算法。

2. 💧 纯净的高斯模糊引擎#

原版的模糊效果在处理某些复杂背景时显得不够干净。我重写了 Canvas 的渲染逻辑。

技术细节:

没有使用复杂的 CSS 滤镜叠加(这在导出图片时会失效),而是直接在 Canvas 绘图阶段操作:

ctx.filter = `blur(${state.glassBlur}px)`;
ctx.drawImage(canvases.bg, 0, 0);
ctx.fillStyle = hexToRgba(state.glassTintColor, state.glassOpacity / 100);
ctx.fillRect(0, 0, width, height);

支持 0-100px 的超大范围模糊调节,并允许叠加自定义色调。这使得它不仅能做“毛玻璃”,还能做“氛围感背景”。

3. 👁️ 粘连预览 (Sticky Preview)#

在 PC 端使用时,左侧的配置项很多,这会导致一个痛点:当我想修改底部的文字设置时,右侧的预览图已经被滚出屏幕了。

为了解决这个问题,我利用 CSS 的 position: sticky 特性重构了布局:

.preview-container {
position: sticky;
top: 1rem;
align-self: flex-start; /* 关键属性,防止 flex 子元素拉伸导致 sticky 失效 */
}

现在,无论左侧配置栏有多长,右侧的预览图永远会吸附在屏幕顶部,真正做到“所见即所得”。

4. 🌙 完美的暗黑模式适配#

熬夜炉管总归 脑壳疼就算了 眼睛还是保护一下

利用 TailwindCSS 的 dark: 变体和 Vue 的 useDark 组合式 API,Cola-Cover 实现了全站的深色模式适配。

结语#

Cola-Cover 的初衷是让自己平时写博客、发视频时能更高效地通过一张封面。

如果你也喜欢这个工具,欢迎来 GitHub 点个 Star,或者直接 Fork 出属于你自己的版本!

Cola Cover - 高效博客封面制工具
https://blog.ftianyu.cn/posts/colacover/
作者
沸腾鱼
发布于
2025-01-20
许可协议
CC BY-NC-SA 4.0