AI 素材像素不工整?批量转成干净像素画与位图转化像素
06/07126 浏览开发日记

问题用 AI 生图做像素风游戏,遇到一个很实际的问题:AI 画的图是"伪像素风"——看着像像素画,但放大一看全是抗锯齿渐变,根本没有干净的格子边界。比如让 AI 画一朵祥云,出来的东西远看确实有那味儿,但放大后你会发现:
- 边缘有半透明过渡
- 颜色不统一,同一块区域有十几种相近色
- 没有对齐任何像素网格



让编辑器剧本批量出的像素云朵,我知道很多出像素的软件,但是那些都有一些局限性
思路:让程序替你"看"每个格子该是什么色核心想法很简单——把图片切成 8×8 的小格子,每个格子里投票决定最终填什么颜色。但"投票"的方式有讲究。方案一:面积投票法(批量出图用)最直觉的做法:1. 先分析全图,聚类出最多 32 个主调色
2. 每个 8×8 格子里,每个像素投 1 票给离它最近的主调色
3. 票最多的颜色赢,整个格子填这个色
简单粗暴,跑得快,结果稳定。一行命令批量处理几十张图,几秒搞定。适合最终出图——参数定好了就不用改了。方案二:76/24 深色加权投票法(编辑器交互调参用)面积投票有个问题:像素画里暗部的轮廓线和细节往往更重要,但暗色区域面积可能很小,纯面积投票容易被大面积亮色吃掉。所以搞了个加权版:1. 每个像素找色距最近的 2 个调色板色
2. 比较这两个色的亮度(L = 0.299R + 0.587G + 0.114B)
3. 较深的那个 → 得 76 票
4. 较浅的那个 → 得 24 票
5. 格子里所有像素投完,票最多的赢
深色权重是浅色的 3 倍多。效果就是画面整体更沉稳厚重,暗部轮廓保留得更好。像素画嘛,轮廓才是灵魂。
实际工作流批量出图(定好参数后跑脚本)bash
复制# 一张图
python3 quantize_image.py cloud_blue.png
# 批量
for f in source/*.png; do
python3 quantize_image.py "$f" "output/$(basename "$f")"
done
跑完就是干净的每格 8×8 纯色块 PNG,直接能用。交互调参(编辑器里三步走)有时候你不确定要几个色、哪些色该留,这时候用编辑器:① 提取调色板 → 自动分析出 N 个主调色
└─ 不满意?鼠标悬停按 Q 删掉不要的颜色
② 量化出图 → 76/24 加权投票,映射到你留下的色板
└─ 看看效果,颜色太多就回去删几个色再来
③ 贴色板(可选)→ 把结果再映射到 136 色标准色板
└─ 想统一全游戏的用色风格时用
反复调到满意为止,确认参数后再用脚本批量跑。
关键细节为什么是 8×8?像素画最常见的格子尺寸。太小(4×4)信息量不够投票不准,太大(16×16)丢失细节。8 是个平衡点。为什么不直接取平均色?试过,效果很差。平均色会产生大量原图中不存在的"伪色"——两个相邻色块混合出一个谁都不是的灰不拉几的中间色。投票法保证最终颜色一定是调色板里的某个色,画面干净。透明怎么处理?格子内超过 40% 的像素是透明的 → 整格设为透明。不然边缘会出现脏色块。深色偏向会不会太重?76:24 是试出来的。试过 60:40 偏向太弱看不出效果,试过 90:10 又太极端丢亮部。3 倍差距刚好让暗色轮廓"站住"但不至于整张图变黑。
前后对比拿祥云素材举例:原图(AI 生成)量化后(8×8 格子)颜色渐变、抗锯齿模糊干净格子、纯色填充上百种相近色压缩到 ≤32 色“伪像素风”真·像素画四种颜色的祥云(蓝、金、灰、粉)都用同一个流程跑出来,风格统一。
总结场景方案特点批量出正式素材Python 脚本 + 面积投票快、稳定、一步到位调参实验看效果编辑器 + 76/24 加权投票可交互、可删色、可反复对比统一游戏用色编辑器贴色板步骤把所有素材映射到同一个 136 色标准色板AI 出图 + 程序化量化,几十张素材一下午搞定。不需要手动点格子,也不需要美术功底。核心公式就一句话:每个格子里让像素投票,深色多投点票,票最多的色赢。就这么朴素。



