关于 ascii-pixel-art
ascii-pixel-art 是将图片转换为带动画和交互效果的 ASCII 艺术 HTML 的技能,适合制作人像、物体主题的网页视觉作品。它结合主体检测、模糊像素背景与画布动画,输出可独立打开的 HTML 文件。
主要功能
- 01从图片检测主体并转换为字符网格
- 02生成模糊且像素化的背景
- 03添加脉冲、扫光与随机闪烁
- 04支持悬停涟漪与字符散射
- 05输出内嵌资源的 HTML 文件
适用场景
- 01将人像制作成动态 ASCII 网页作品
- 02为产品图片创建复古风格视觉效果
- 03把照片转换为可交互的 HTML 展示
- 04制作用于社交媒体的动画图像
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ckorhonen/ claude-skills --skill ascii-pixel-art安装后在 Claude Code 中输入/ascii-pixel-art确认已加载。
附带文件scripts/ascii_pixel_effect.pyscripts/test_logic.py
详细介绍
ASCII 像素艺术生成器
从图像生成动态 ASCII 艺术,具备主体检测、模糊像素化背景和动态视觉效果。
描述
将图像转换为带有精妙视觉效果的交互式 ASCII 艺术。使用计算机视觉检测主体,营造氛围感背景,并添加脉冲效果、对角线扫光、随机闪烁和交互式悬停响应等电影级动画。
适用场景
✅ 适用于:
- 为照片或肖像创建艺术化可视化效果
- 生成复古/赛博朋克风格内容
- 构建交互式网页艺术作品
- 将图像转换为动态 HTML 显示效果
- 创建独特的社交媒体内容
- 演示创意编程技巧
❌ 不适用于:
- 简单的文本 ASCII 艺术即可满足需求
- 对性能要求严格(处理开销较大)
- 无障碍性至关重要(依赖视觉效果)
- 源图像没有清晰的主体(对肖像/物体效果最佳)
- 输出需要为静态内容(此工具会生成动态 HTML)
前提条件
所需软件包:
pip install pillow rembg numpy
系统要求:
- Python 3.7+
- 图像处理约需 500MB RAM
- rembg 模型会自动下载(约 180MB)
用法
基本命令
python3 scripts/ascii_pixel_effect.py <input_image> [output.html]
示例
# Generate with default output name
python3 scripts/ascii_pixel_effect.py portrait.jpg
# Specify output file
python3 scripts/ascii_pixel_effect.py photo.png artwork.html
# Process multiple images
for img in *.jpg; do
python3 scripts/ascii_pixel_effect.py "$img" "${img%.jpg}.html"
done
工作原理
7 步处理流程
1. 加载并调整大小
- 打开图像并转换为 RGB
- 调整为宽度 900px(保持纵横比)
- 使用 LANCZOS 滤镜进行高质量缩小
2. 构建模糊背景
- 应用高斯模糊(半径 = 14)
- 将亮度降低 35%(乘以 0.65)
- 将饱和度降低 50%(与亮度灰度图混合)
- 使用 BOX 滤镜缩小,再用 NEAREST 滤镜放大,进行像素化处理
- 创建氛围感底层
3. 检测主体
- 运行 rembg 生成 Alpha 蒙版
- 阈值:蒙版均值 > 0.25 时判定为主体
- **关键:**仅使用蒙版(不补充亮度信息)
- 防止明亮背景出现 ASCII 字符
4. 添加像素网格叠加层
- 每隔 24px 绘制白色方框
- 不透明度为 5%,营造微妙的赛博朋克风格
- 仅应用于主体单元格
- 静态图层(仅绘制一次)
5. 构建字符网格
- 单元格大小:11×14 像素
- 对每个单元格采样 RGB 和亮度的平均值
- **主体单元格:**从密度渐变字符集中选取 ASCII 字符,并规范化颜色
- **背景单元格:**使用深蓝色(40,65,100)的
.字符 - ASCII 渐变:
@#S08Xox+=;:-,.(亮度反转)
6. 合成图层
- 图层 1:模糊背景(嵌入为 base64)
- 图层 2:像素网格画布
- 图层 3:ASCII 字符画布
- 单个包装 div 将所有图层拉伸至相同尺寸
7. 添加动画(JavaScript)
- **正弦波脉冲:**明亮的主体单元格呈周期性闪烁
- **对角线扫光:**扫过的高光效果
- **随机闪烁:**每个单元格有 0.25% 的概率闪烁,持续 2–8 帧
- **悬停涟漪:**在 8 个单元格范围内显示交互式青色光晕
- **字符散射:**悬停时,在 2 个单元格范围内显示随机字符
- **动态光晕:**shadowBlur 随亮度和脉冲变化
- **背景点:**不透明度固定为 30%
参数
| 参数 | 值 | 用途 |
|---|---|---|
| TARGET_WIDTH | 900px | 输出图像宽度 |
| CELL_W × CELL_H | 11×14px | 字符单元格尺寸 |
| GRID_STEP | 24px | 像素网格间隔 |
| 模糊半径 | 14 | 背景模糊强度 |
| BG darken | 0.65 | 背景变暗程度(暗 35%) |
| BG desaturate | 50% | 背景颜色降低幅度 |
| 主体阈值 | 0.25 | 用于检测主体的蒙版均值 |
| ASCII 渐变 | @#S08Xox+=;:-,. | 密度渐变(暗→亮) |
| 背景点颜色 | (40, 65, 100) | 背景字符 RGB |
| 背景点不透明度 | 30% | 背景字符透明度 |
| 网格不透明度 | 5% | 像素网格可见度 |
颜色公式
def normalize_color(r, g, b):
"""Preserve hue, maximize brightness"""
mx = max(r, g, b, 1)
return int(r/mx*255), int(g/mx*255), int(b/mx*255)
此公式会规范化 RGB 值,使最亮的通道达到 255,在保留色相的同时,让主体像素的颜色饱和度最大化。
输出
独立的 HTML 文件:
- 无外部依赖
- 背景图片采用 Base64 编码
- 内联 CSS 和 JavaScript
- 可直接在浏览器中打开
- 具有交互式悬停效果
- 大小约为 500KB-2MB,具体取决于图片大小
视觉效果:
- 60fps 动画
- 根据鼠标移动做出响应
- 电影感光照和辉光
- 赛博朋克/复古美学
提示与最佳实践
图片选择:
- 最佳: 肖像、人物、轮廓鲜明的物体
- 良好: 产品照片、主体清晰的艺术作品
- 避免: 风景、抽象图案、杂乱的背景
性能:
- 处理时间:每张图片 5-15 秒
- 输出大小:HTML 约 1-2MB
- 浏览器性能:出色(基于 canvas)
艺术控制:
- 较暗的源图片 → 对比度更强烈
- 高对比度主体 → 边缘定义更清晰
- 干净的背景 → 点阵更整洁
- 居中的主体 → 视觉平衡更好
常见问题:
- 未检测到主体: 尝试使用前景与背景分离更明显的图片
- 太亮: 可能需要调整源图片
- 动画卡顿: 检查浏览器硬件加速
相关变体
- v2 (灰色背景): 使用中性灰色背景替代像素化模糊效果的变体
- 查看
skills/ascii-pixel-effect-v2/SKILL.md了解实现方式
参考资料
- 原始实现:2026 年 3 月
- 授课者:Sensei
- 灵感来源:经典 ASCII 艺术 + 现代 Web 动画
- 技术:计算机视觉 + 生成艺术
许可证
MIT 许可证 - 可免费使用和修改
评论
支持 Markdown