merge: 像素化技术路线调研落盘(design/research/pixelization-routes-survey-2026-09-27.md)——六大类20条路线七维总表+痛点归因+Top3+现行脚本最小补丁
This commit is contained in:
commit
685b89bdbf
1 file changed
+196
@@ -0,0 +1,196 @@
|
||||
# 图片像素化技术路线调研(高分辨率 AI 生图 → 真像素画)
|
||||
|
||||
- **日期**:2026-09-27
|
||||
- **委托背景**:AI 生图模型产出约 687×1024 的"像素艺术风格"高分辨率图——块状像素看起来很大,但像素网格没有真正对齐,且带 JPEG 压缩噪声、边缘反锯齿、奶油色描边、脚下地面阴影、纯灰单色背景。目标产物:内容高度约 96~144 物理像素、色板 ≤32 色、最好去底出透明背景的真像素画,须能进 Python 脚本批量化。现行自写管线(`tools/pixelize_candidates.py` v3)效果不理想,痛点=脏点/发糊/细节丢失/边缘白灰翳。
|
||||
- **方法**:三路并行核实一手来源(官方文档/GitHub README+LICENSE/官方手册/源码),引用 2026-09-25 已有调研([pixel-grid-gen-research-2026-09-25.md](pixel-grid-gen-research-2026-09-25.md))已核实的工具不重复深挖。无法访问/查到的条目如实标注。
|
||||
|
||||
---
|
||||
|
||||
## 摘要(结论先行)
|
||||
|
||||
1. **渠道共六大类、本次落实 20 条路线**。总表见 §2。一句话格局:**"网格对齐"和"量化清洗"是两个独立环节,没有任何单一传统工具同时做好两件事**——必须组合:网格环节的最优解是 pixel-art-fixer(MIT,基准对齐率 94%),量化环节的质量上限是 pngquant/libimagequant(alpha 预乘感知)。
|
||||
2. **现行管线四大痛点的头号根源已定位**(§1):①从未估计输入图的名义块尺寸与网格相位,BOX→NEAREST 两段缩放等于在模糊图上随机相位点采样;②Pillow `quantize()` **默认开 Floyd-Steinberg 抖动**(官方文档实证),在中间分辨率上撒噪点,NEAREST 抽样把它们带进成品——脏点的最大单一来源,一行参数可灭;③MEDIANCUT 不支持 RGBA 被自动降级到 FASTOCTREE、且在 RGB 空间非感知量化;④JPEG 噪声无前置去噪步骤。
|
||||
3. **Top 3 推荐**(§4):路线一=pixel-art-fixer 收网格 → 去底 → pngquant/固定色板量化 → 连通域清脏点 → alpha 腐蚀+实色回填去白翳(纯本地、全 MIT/Apache、可批量);路线二=Retro Diffusion 免费 pixel-fixer(浏览器本地 WASM 或免费 API)当效果上限参照物+疑难图兜底;路线三=PixelOE(Apache-2.0)做细节保留向对照。WuZongWei6/Pixelization(SIGGRAPH)**因自定义许可证明确禁止商用(含游戏资产)出局**,只配当研究基线。
|
||||
4. **算术上的好消息**:1024÷96≈10.7、1024÷144≈7.1,即输入图名义块约 7~11px;fixer 修网格后得到的原生分辨率高度≈93~146,**与目标档几乎 1:1,修完网格基本不用再缩**——这是信息损失最小的路径。
|
||||
|
||||
---
|
||||
|
||||
## §1 输入特征与痛点归因(对照现行 `pixelize_candidates.py` v3)
|
||||
|
||||
现行管线顺序:屏障法/底色门洪泛去底+吃奶油描边 → 裁剪 → BOX 预滤到 4×目标 → `quantize(64, MEDIANCUT)` → NEAREST ÷4 → alpha MinFilter(3)+阈值 → 删 <10px 孤立连通域 → 边缘色内插。
|
||||
|
||||
| 痛点 | 根源(按贡献排序) | 证据 |
|
||||
|---|---|---|
|
||||
| 发糊+细节丢失 | 不做网格相位估计,直接 BOX 到 4× 再 NEAREST ÷4:BOX 是低通模糊,NEAREST 只取 1/16 样本且采样相位随机,等价于"在糊图上掷骰子点采样" | `pixelize_candidates.py:296-303` |
|
||||
| 脏点 | ①`quantize()` 不传 dither 时**默认 Floyd-Steinberg 误差扩散**——它在 4× 中间图上制造的单像素噪点被 NEAREST 抽样原样带到成品;②JPEG 噪点无前置去噪;③despeckle 只按 alpha 连通域删,不清理"颜色孤立但 alpha 连着主体"的色斑 | Pillow 官方文档 quantize 签名 `dither=Dither.FLOYDSTEINBERG` 为默认值([Image 文档](https://pillow.readthedocs.io/en/stable/reference/Image.html)) |
|
||||
| 边缘白/灰翳 | 奶油描边靠 HSV 启发式吃除,JPEG 噪声会在描边上开 1-2px 缺口(脚本注释中 duergar 甲面被吃空实证);alpha 通道 MinFilter+NEAREST 阈值化粗糙 | `pixelize_candidates.py:8-11` 注释 |
|
||||
| 色板超标 | `QUANT_COLORS=64` 与 ≤32 目标不符;MEDIANCUT 在 RGB 空间非感知、且不支持 RGBA(带 alpha 时 Pillow 自动改用 FASTOCTREE,质量更低) | Pillow 文档原文 "MEDIANCUT and MAXCOVERAGE do not support RGBA images" |
|
||||
| 网格不对齐 | 全程无网格检测环节 | 全程 |
|
||||
|
||||
**名义块尺寸算术**:687×1024 若块约 7~11px,原生逻辑分辨率约 (62~98)×(93~146)。目标内容高 96~144 恰在此区间——**输入图的"隐含网格"和目标尺寸几乎同级**,因此正确策略是"恢复隐含网格"而非"暴力缩小",这正是 pixel-art-fixer 类工具的问题定义。
|
||||
|
||||
---
|
||||
|
||||
## §2 渠道总表(渠道 × 七维:好/中/差)
|
||||
|
||||
维度顺序:网格对齐 / 脏点控制 / 边缘白翳 / 细节保留 / 色板可控 / 抗 JPEG 噪声 / Python 脚本批量化。许可证与成本并入一句话总评。
|
||||
|
||||
| # | 渠道/路线 | 对齐 | 脏点 | 白翳 | 细节 | 色板 | 抗噪 | 脚本 | 一句话总评 |
|
||||
|---|---|---|---|---|---|---|---|---|---|
|
||||
| a1 | Pillow 自写(resize+quantize) | 差 | 中* | 差 | 中 | 中 | 中 | 好 | *必须显式 `dither=NONE`,默认 FS 抖动是脏点制造机;RGBA 量化自动降级 FASTOCTREE。免费,兜底基线 |
|
||||
| a2 | OpenCV 积木(INTER_AREA+kmeans+medianBlur+连通域) | 差 | 好 | 中 | 中 | 中 | 好 | 好 | 清洗环节最强积木:medianBlur(3) 杀 JPEG 噪点、连通域面积阈值杀脏点,Apache-2.0 |
|
||||
| a3 | ImageMagick CLI(-scale/-sample/-remap) | 差 | 中 | 中 | 中 | 好 | 中 | 好 | 不写代码的等价物;`-colors` 默认开抖动需 `+dither` 关;无 Atkinson。自有许可证免费 |
|
||||
| a4 | pngquant / libimagequant | 差 | 好 | 好 | 中 | 好 | 中 | 好 | **32 色+透明量化的质量上限**(gamma 校正+alpha 预乘感知);GPLv3/商业双授权,脚本内部调用无传染 |
|
||||
| b1 | **pixel-art-fixer**(Retro-Diffusion) | **好** | 好 | 中 | 好 | 中 | 好 | 好 | 网格对齐环节当前最优:三检测器投票+结构/颜色解耦重建,基准恢复 77%/对齐 94%;MIT,Python+Rust CLI |
|
||||
| b2 | PixelOE(KohakuBlueleaf) | 中 | 好 | 中 | **好** | 中 | 中 | 好 | 轮廓扩张+对比度感知,细节保留向;不估网格相位;Apache-2.0,有 ComfyUI 节点 |
|
||||
| b3 | pyxelate | 差 | 中 | 差 | 好 | 好 | 中 | 好 | Sobel 加权块内降采样+多抖动可选+色板迁移;factor 手给、alpha 阈值砍半透明;MIT |
|
||||
| b4 | Pixel-Extractor / ai-pixelart-extractor | 好 | 中 | 中 | 中 | 中 | 中 | 中 | 同为"AI 图专用":边缘检测+网格拟合(支持非方形像素比);形态半成品(PWA 网页/WIP CLI),算法思路可借鉴;均 MIT |
|
||||
| b5 | unfake.py 等(引 09-25 报告) | 中 | 中 | 中 | 中 | 差 | 中 | 好 | fixer 的轻量前代,pixel-bench 收录为对照;MIT |
|
||||
| c1 | Aseprite(GUI+CLI) | 差 | 中 | 中 | 中 | 好 | 差 | 中 | 菜单级支持缩+限色 32+抖动量控制+透明索引,CLI 可一条龙但调色板须先生成;$19.99 或自编译免费(EULA 限个人目的,含创作商用美术) |
|
||||
| c2 | GIMP(Script-Fu) | 差 | 中 | 中 | 中 | 好 | 差 | 中 | 免费 GPL 等价流程:插值 None+Indexed 32 色+抖动四档可关;最近邻缩非整数倍同样跳像素 |
|
||||
| c3 | Photoshop(UXP 脚本) | 差 | 中 | **好** | 中 | 好 | 中 | 差 | Indexed 转换的 **matte 参数**专治"透明区邻接抗锯齿边缘填色";仅订阅、无 CLI |
|
||||
| d1 | **RD Pixel Art Fixer 网页/免费 API** | 好 | 好 | 中 | 好 | 好 | 好 | 中 | 零成本上限参照物:Standard 引擎本地 WASM 不上传;色数 2-256+自定义色板图+抖动矩阵/强度;免费 API 限 10 次/分 |
|
||||
| d2 | 其他在线(Pixel It/Piskel/PixelMe 等) | 差 | 中 | 差 | 中 | 中 | 差 | 差 | 交互预览/教学向;Pixelicious 本次网络无法核实 |
|
||||
| e1 | WuZongWei6/Pixelization(SIGGRAPH Asia 2022) | 好 | 中 | 差 | 中 | 差 | 中 | 中 | 构造性网格对齐+cell 尺寸可控,但 **RGB-only 无 alpha、不支持指定色板、许可证明确禁商用(点名 video games)——出局**,仅作研究基线 |
|
||||
| e2 | SD-πXL(SIGGRAPH Asia 2024) | 好 | 中 | 中 | 中 | 好 | 中 | 差 | 唯二"开源+直出量化+可控色板"方法级选项;SDXL 蒸馏慢、8GB 吃紧、2025-05 后无更新;MIT |
|
||||
| e3 | RD `rd_pro__pixelate` / PixelLab API | 好 | 好 | 好 | 好 | 好 | 好 | 好 | 花钱买省心轨:整图转像素画 $0.18/张起、可传 input_palette+remove_bg;闭源,ToS 商用条款需自核 |
|
||||
| e4 | 生成端像素 LoRA 直出(引 09-25) | 差 | — | — | — | — | — | 好 | 只给风格不给网格,必须与后处理组合,不构成独立路线 |
|
||||
| f1 | 前置去底(OpenCV 键控 / rembg / BiRefNet) | — | — | **好** | — | 好* | — | 好 | *去底先于量化,奶油描边/灰底/阴影不占色板名额;纯灰底用确定性键控,复杂底 rembg(MIT)/BiRefNet(MIT,8GB 可跑标准版);**RMBG-2.0 非商业勿用** |
|
||||
| f2 | 矢量描摹(vtracer/potrace) | 差 | — | 差 | — | — | — | 中 | **不适用**:贝塞尔轮廓天然反锯齿、不落整数网格,等于把对齐问题重新引入 |
|
||||
| f3 | 人工手修(Aseprite 1600% 目检) | 好 | 好 | 好 | 好 | 好 | 好 | 差 | 质量上限本身;项目"三锁工作流"既有共识的最后一锁,不可批量化但不可省 |
|
||||
|
||||
---
|
||||
|
||||
## §3 渠道分节详述
|
||||
|
||||
### a. 传统图像处理算法
|
||||
|
||||
**a1 Pillow(本机 12.3.0 实测)**。缩放滤波器:NEAREST(只取一个最近像素,其余全弃)/ BOX(等权盒平均,官方缩小质量评级最低)/ HAMMING / BICUBIC / LANCZOS(官方缩小质量最高但本质仍是低通模糊,像素画场景不适用)。量化 `quantize(colors, method, kmeans, palette, dither)`:method 四值 MEDIANCUT(中值切分,默认)/MAXCOVERAGE/FASTOCTREE/LIBIMAGEQUANT;**MEDIANCUT 与 MAXCOVERAGE 不支持 RGBA**,带透明图自动改用 FASTOCTREE;**dither 默认 FLOYDSTEINBERG**,要干净平色必须显式 `dither=Image.Dither.NONE`;固定色板用 `quantize(palette=pal_img)`(pal_img 为 P 模式图)。**LIBIMAGEQUANT 在官方 pip wheel 中不可用**(libimagequant 是 GPLv3,Pillow 官方明示不打进二进制,本机 `features.check('libimagequant')=False` 实证),要用须源码构建。来源:[Pillow filters](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#filters)、[Image.quantize](https://pillow.readthedocs.io/en/stable/reference/Image.html)、[building-from-source](https://pillow.readthedocs.io/en/stable/installation/building-from-source.html)。
|
||||
|
||||
**a2 OpenCV(Apache-2.0)**。`cv2.resize` 缩图官方钦定 **INTER_AREA**("To shrink an image, it will generally look best with INTER_AREA");`cv2.kmeans(data, K, ..., attempts, KMEANS_PP_CENTERS)` 做色板聚类(官方颜色量化教程即此法),K=32 直接给色数但不感知 alpha,透明像素须先分离;`cv2.medianBlur(im, 3)` 官方称对椒盐噪声"highly effective",JPEG 块噪同理;`cv2.connectedComponentsWithStats` 输出 `CC_STAT_AREA`,按面积阈值删孤立色块=脏点清理标准件。全部纯 Python 可批。来源:[resize](https://docs.opencv.org/4.x/da/d54/group__imgproc__transform.html)、[kmeans 颜色量化](https://docs.opencv.org/4.x/d1/d5c/tutorial_py_kmeans_opencv.html)、[滤波](https://docs.opencv.org/4.x/d4/d13/tutorial_py_filtering.html)、[连通域](https://docs.opencv.org/4.x/d3/dc0/group__imgproc__shape.html)。
|
||||
|
||||
**a3 ImageMagick(自有开源许可证,免费)**。缩图三算子:`-sample` 纯抽样删行列、**不产生新颜色**但细线严重走样;`-scale` 邻域平均=Box 滤波;`-resize` 完整滤波(可 `-filter Lanczos/Point/Box`)。量化:`-colors N` **默认开抖动**(Riemersma 曲线法,6.4.2-9 起可加 FloydSteinberg),须 `+dither` 或 `-dither None` 关闭;`-remap palette.png` 用自定义固定色板(**色板图勿用 JPEG**,有损压缩会引入额外颜色);无原生 Atkinson。来源:[resize usage](https://usage.imagemagick.org/resize/)、[quantize usage](https://usage.imagemagick.org/quantize/)。
|
||||
|
||||
**a4 pngquant / libimagequant(GPLv3 或商业双授权)**。量化质量上限:官方原文"with support for gamma correction and premultiplied alpha",且抖动算法"does not add unnecessary noise"——alpha 预乘感知意味着半透明边缘不会被量化成脏色,正好补 Pillow FASTOCTREE 的短板。关键参数:`--quality min-max`(低于 min 不保存,退出码 99)、`--speed 1-11`(默认 4,高速档对低色数不利)、`--floyd=N`(0-1)/`--nofs` 关抖动、`--posterize bits`;支持 `pngquant *.png` 批量与管道。GPL 对"脚本调 CLI"的内部用法无传染;嵌入分发才需商业授权。来源:[pngquant](https://github.com/kornelski/pngquant)、[libimagequant](https://github.com/ImageOptim/libimagequant)。
|
||||
|
||||
**a5 Atkinson 抖动**。像素画圈偏爱的低保真抖动(只扩散 3/4 误差,对比度高、噪点少)。Python 现成实现:hbldh/hitherdither(MIT,261★,2023 停更但算法无时效性,不在 PyPI 需 `pip install git+`,支持任意自定义色板);pyxelate 内置 `dither="atkinson"`。ImageMagick/Pillow 均不原生支持。来源:[hitherdither](https://github.com/hbldh/hitherdither)、[pyxelate 源码](https://github.com/sedthh/pyxelate/blob/master/pyxelate/pyx.py)。
|
||||
|
||||
### b. 专门像素化算法与开源项目
|
||||
|
||||
**b1 pixel-art-fixer(Retro-Diffusion,MIT,约 430★)**——09-25 报告已核实,引用:三种相位不变网格检测器投票(自相关/行程梳状/位移自相似)+争议仲裁;重建两段式=自适应 k-means 定格子结构、未量化原像素回填定色(结构与颜色解耦);开源基准 pixel-bench 上恢复原生分辨率 77%(第二名 4%)、网格对齐 94%;Python 包+Rust CLI(快 11-24×),`python -m pixelfixer.cli in.png --extract out.png`,`--overlay` 可出网格叠图人工核对。极限损坏图需其官网神经版(闭源)。来源:[pixel-art-fixer](https://github.com/Retro-Diffusion/pixel-art-fixer)、[pixel-bench](https://github.com/Retro-Diffusion/pixel-bench)。
|
||||
|
||||
**b2 PixelOE(KohakuBlueleaf,Apache-2.0,511★,活跃)**。非神经网络的对比度感知像素化:Outline Expansion(轮廓扩张)保证缩小后关键边缘不被平均掉,主打细节保留;需给定目标尺寸(不估输入网格相位);已进 ComfyUI_essentials(`PixelOEPixelize` 节点),纯 Python 可批。来源:[PixelOE](https://github.com/KohakuBlueleaf/PixelOE)。
|
||||
|
||||
**b3 pyxelate(sedthh,MIT,约 1.7k★,2026-01 仍维护)**。`Pyx(factor, palette, dither, sobel, depth, alpha)`:按手给整数 factor 切块,Sobel 梯度幅度加权做块内降采样(边缘处保形);fit/transform 分离支持"色板迁移";dither 可选 none/naive/bayer/floyd/atkinson;alpha 为阈值二值化(默认 0.6)非逐像素保留——半透明描边会被砍掉。CLI:`pyxelate in.jpg out.png --factor 14 --palette 7`。来源:[pyxelate](https://github.com/sedthh/pyxelate)。
|
||||
|
||||
**b4 AI 生图专用提取器两个(均 MIT,均约 28★)**。univeous/Pixel-Extractor:边缘检测+**网格拟合自动估计**(官方 README 明确支持**非方形像素比**)+直方图/K-Means 清色噪+自动背景去除,直接针对 AI 图的色渗/反锯齿/网格不齐/噪声背景四类问题——形态是浏览器 PWA(Pyodide 跑 NumPy/SciPy,首载 30MB),不能批处理但**算法用 Python 写成、思路可直接抄进脚本**。其上游 Donitzo/ai-pixelart-extractor 是 Python CLI(`--split_distance 10 --create_summary`),自承"严重错位图会失败",WIP。来源:[Pixel-Extractor](https://github.com/univeous/Pixel-Extractor)、[ai-pixelart-extractor](https://github.com/Donitzo/ai-pixelart-extractor)。
|
||||
|
||||
**b5 其他核实过的项目**:unfake.py(MIT,轻量网格吸附,pixel-bench 对照组);MidFord/BetterPixelArtDownscale(silhouette-first 降采样,颜色只从源图真实颜色选、hidden-RGB 隔离,治白翳思路严谨,但**无 LICENSE 文件**,批处理集成前须向作者要授权);ImageGoNord(固定色板映射,AGPL/MIT 标注矛盾);pixelit JS(块均值+固定色板,浏览器端);pixel-mosaic(边缘感知网格对齐内容边缘,JS);PAC(GUI 调参玩具)。来源:各 GitHub 仓库(pixel-bench 对照名单见 [pixel-bench](https://github.com/Retro-Diffusion/pixel-bench))。
|
||||
|
||||
### c. 现成软件内置功能
|
||||
|
||||
**c1 Aseprite($19.99 买断;源码可自编译,EULA 2(g) 限个人目的、含创作商用美术)**。缩小:Sprite > Sprite Size(Nearest-neighbor/Bilinear/RotSprite 三选,默认 NN);**"Pixel perfect scaling"在缩放里不存在**——那是铅笔笔迹修齐模式,勿混。限色:调色板右键 → New Palette from Sprite(color count limit 填 32)→ Sprite > Color Mode > Indexed;More Options 里有 Dithering Amount 0-100% 滑杆。**CLI 一条龙可行**:`aseprite -b in.png --scale 0.125 --palette pal32.png --color-mode indexed --dithering-algorithm none --save-as out.png`;短板=CLI 没有"从图量化生成 N 色板"的 flag(色板须先在 GUI 生成或用 Lua)。最近邻缩非整数倍会整行整列跳像素;不去底、不去噪。来源:[sprite-size](https://www.aseprite.org/docs/sprite-size/)、[cli](https://www.aseprite.org/docs/cli/)、[EULA](https://github.com/aseprite/aseprite/blob/main/EULA.txt)。
|
||||
|
||||
**c2 GIMP 2.10(GPL,免费)**。Image > Scale Image 选 Interpolation: None(即最近邻;缩图文档另推荐 LoHalo 但对像素画色块图不适用);Image > Mode > Indexed:Generate optimum palette + **Maximum Number of Colors 填 32**,抖动四档=None / Floyd-Steinberg(normal) / Floyd-Steinberg(reduced color bleeding) / Positioned,另有"抖动透明"开关;Filters > Blur > Pixelize 只打块不缩尺寸(确认)。批处理:`gimp-2.10 -i -b` Script-Fu 可写完整"打开→缩放→转索引→存 PNG"。来源:[scale](https://docs.gimp.org/2.10/en/gimp-image-scale.html)、[indexed](https://docs.gimp.org/2.10/en/gimp-image-convert-indexed.html)、[batch](https://docs.gimp.org/2.10/en/gimp-fire-up.html)。
|
||||
|
||||
**c3 Photoshop(仅订阅)**。Image Size 重采样 NEARESTNEIGHBOR;Image > Mode > Indexed Color:colors 数、palette 类型十余种、dither=NONE/DIFFUSION/PATTERN/NOISE、ditherAmount、**matte**(官方释义"透明区邻接抗锯齿边缘的填色"——六类工具中唯一把去白翳做成一等参数)、preserveExactColors;Mosaic 滤镜只打块不降尺寸。批处理走 UXP 脚本(resizeImage+changeMode 均可编程),无 CLI。来源:[UXP Document.resizeImage](https://developer.adobe.com/photoshop/uxp/2022/ps-reference/classes/document)、[IndexedConversionOptions](https://developer.adobe.com/photoshop/uxp/2022/ps-reference/objects/conversionoptions/indexedconversionoptions)。(helpx.adobe.com 本次调研网络 403 不可达,界面文案以 UXP API 文档交叉核实。)
|
||||
|
||||
**c4 Krita / Affinity**:Krita 无索引色模式(其"Index Color"滤镜是 index-painting 非调色板量化),不成体系;Affinity 已归 Canva 改免费一体化应用,但索引色/最近邻细节无可达一手文档。两者不纳入主路线。
|
||||
|
||||
### d. 在线工具/网站
|
||||
|
||||
**d1 Retro Diffusion Pixel Art Fixer(免费,免注册)**。网页标题原文即本用例问题定义:"detects the implied grid, snaps every cell to a true pixel"。前端拆检实证:**Standard 引擎=本地 WASM 纯客户端不上传;Neural 引擎会上传服务器**(敏感图选 Standard)。可调:pixel size、**Color count 2-256**、抖动矩阵 2/4/8+强度 0-10、自定义色板图;输入上限 16MP。另有免费 API 端点 `POST /v2/pixel-fixer/standard|neural`(限 10 次/分/Token)可脚本化。来源:[工具页](https://retrodiffusion.ai/tools/pixel-art-fixer)、[PIXEL_FIXER.md](https://github.com/Retro-Diffusion/api-examples/blob/main/PIXEL_FIXER.md)。
|
||||
|
||||
**d2 其余在线**:Pixel It 演示站(MIT JS 库,Block size/色板上传/最大尺寸,无抖动,纯客户端);Piskel(免费 Apache-2.0,导入大图可缩放到指定帧尺寸但缩放算法只有 smoothing 开关、无自动限色);PixelMe(AI 照片转像素,人脸向,服务端处理,商用要 credits);OnlinePNGTools pixelate 确认**只打块不缩尺寸**(不适用);Pixilart 无转换工具;**Pixelicious 本次网络无法访问(DNS 疑污染+CloudFront 超时),未能核实**。来源:各站实测。
|
||||
|
||||
### e. AI/模型类
|
||||
|
||||
**e1 WuZongWei6/Pixelization(SIGGRAPH Asia 2022,非 2020)**。GAN 像素化:AliasNet+结构提取器,`test_pro.py --cell_size` 控制格子尺寸(CLI 注明 2-8),输出先 NEAREST 缩到网格再放大——**网格由构造对齐**;训练集本身含非像素照片,任意图可入。三个出局理由:①LICENSE 自定义非商业,原文点名禁止用于"video games"等商业产物;②`convert('RGB')` 强转、**不支持透明**;③**不支持用户给定色板**,官方 issue 区有颜色漂移投诉。权重 Google Drive 链接存活、PyTorch≥1.7.1 可跑,但只配当研究基线。来源:[仓库](https://github.com/WuZongWei6/Pixelization)、[LICENSE](https://github.com/WuZongWei6/Pixelization/blob/main/LICENSE.md)。
|
||||
|
||||
**e2 SD-πXL(SIGGRAPH Asia 2024,MIT,67★)**。Score distillation 路线:文本**或图像**输入,可指定输出尺寸与色板,输出即低分辨率量化图(网格构造对齐);基于 SDXL,慢、非即插权重、8GB 吃紧,2025-05 后无更新。方法级储备,非即用。来源:[SD-piXL](https://github.com/AlexandreBinninger/SD-piXL)、[arXiv](https://arxiv.org/abs/2410.06236)。
|
||||
|
||||
**e3 闭源服务(RD / PixelLab)**。RD 生成 API 有专门"已有图→像素画"style:`rd_pro__pixelate`(INPUT_IMAGE_REQUIRED,输出 16-256px,$0.18/张);配套免费端点 k_centroid_downscale/color_reducer/palette_converter(传 input_palette)与 background_remover($0.01,带 transparency_threshold/force_solid_pixels)。PixelLab 订阅 $12/月起,强项在角色生成/旋转/动画而非大图转像素。生成图商用条款:PixelLab FAQ 明确允许(禁用于训练模型);RD ToS 需自核。来源:[RD API 指南](https://www.retrodiffusion.ai/app/guide/api)、[PixelLab pricing](https://www.pixellab.ai/pricing)。
|
||||
|
||||
**e4 生成端"直出对齐网格"**:维持 09-25 报告结论——开源侧无任何"生成即网格对齐"权重(LoRA 只给风格不给网格),2026-09-25 之后无新变化;对齐能力仍只在闭源服务手中。
|
||||
|
||||
### f. 其他路线(环节级)
|
||||
|
||||
**f1 前置去底**(必须在量化之前,否则奶油描边/灰底/阴影吃掉色板名额且染脏边缘):纯灰单色底首选 **OpenCV inRange 键控**——确定性、硬 alpha、不向色板引入中间色([官方教程](https://docs.opencv.org/4.x/da/d97/tutorial_threshold_inRange.html));复杂底用 rembg(MIT,pip 即用,u2net Apache-2.0)或 BiRefNet(MIT,标准模式约 5.5GB 显存 8GB 可跑,HR 版约 9.5GB 吃紧);**RMBG-2.0 为非商业+门控,勿用于游戏资产**。注意 rembg/BiRefNet 的软 alpha 羽化边会给量化制造半透明脏像素,出 alpha 后建议阈值化。来源:[rembg](https://github.com/danielgatis/rembg)、[BiRefNet](https://github.com/ZhengPeng7/BiRefNet)、[RMBG-2.0](https://huggingface.co/briaai/RMBG-2.0)。
|
||||
|
||||
**f2 白翳专项(alpha defringe)**:ImageMagick 没有 `-defringe`(官方选项索引全文核对,网传为讹);等价件=`-alpha shape` 或 `-channel A -morphology Erode disk:1`。PIL/OpenCV 层面十几行:alpha 腐蚀 1px + 边界像素 RGB 回填最近内部实色(即现行脚本 edge_inpaint 的思路,保留即可)。参考:[SO 讨论](https://stackoverflow.com/questions/48539751/removing-black-edge-artifacts-from-a-transparent-image)。
|
||||
|
||||
**f3 矢量描摹(vtracer MIT 活跃/potrace GPL)**:不适用——贝塞尔轮廓天然反锯齿不落整数网格,转回栅格等于重引入对齐问题。
|
||||
|
||||
**f4 网格相位估计的开放实现**:pixel-art-fixer 三检测器之外,唯一有代码可抄的公开参考是 **0x09/resdet**(FFT 自相关找插值周期伪影反推原始分辨率;libresdet LGPL-2.1、CLI MIT,313★),其"行/列差分剖面+自相关主峰"数学可直接移植成几十行 Python。来源:[resdet](https://github.com/0x09/resdet)。
|
||||
|
||||
**f5 人工手修**:三锁工作流既有共识(拼版锁定→像素化参数冻结→手修相位差/断线/色板偏差),即使 fixer 对齐率 94% 仍有约 6% 需人工修格,1600% 放大目检不可省。
|
||||
|
||||
---
|
||||
|
||||
## §4 Top 3 推荐路线(针对本输入特征)
|
||||
|
||||
输入特征回顾:AI 生图、网格不对齐、JPEG 噪声、奶油描边+灰底+地影、目标 ≤32 色/96~144px 高/透明底、要进脚本。
|
||||
|
||||
### 路线一(主力):fixer 收网格 → 去底 → pngquant 量化 → 清洗去翳(纯本地、全自动、许可证全绿)
|
||||
|
||||
```
|
||||
1. pixel-art-fixer --extract 把 687×1024 收回到隐含原生网格(约 93~146 高,≈目标档)
|
||||
——带底跑检测更稳(均匀底色有利于自相关峰值)
|
||||
2. 1x 图上去底:OpenCV inRange 键控灰底(容差 ~24-48)+ 沿用现行屏障/影色规则吞地影
|
||||
——1x 下底色是平整单色,键控零失误;alpha 阈值化成硬边
|
||||
3. pngquant 32 --quality 70-95 --speed 3 --floyd=0 量化
|
||||
——先试零抖动;若渐变区出现色带再 --floyd=0.2-0.4
|
||||
——或对接项目冻结色板:Pillow quantize(palette=项目色板图, dither=NONE) 做 remap
|
||||
4. OpenCV connectedComponentsWithStats 删面积 <4px(96 档)/<8px(144 档) 的孤立色块
|
||||
5. alpha 腐蚀 1px + 边界像素回填最近内部实色(沿用现行 edge_inpaint 思路)
|
||||
```
|
||||
|
||||
- 为什么是它:网格环节用的是基准第一的工具(94% 对齐率);量化环节用的是 alpha 感知的质量上限;每一步都有 CLI/Python API;许可证 MIT/Apache(pngquant GPL 仅内部脚本调用无传染)。
|
||||
- 质量兜底:fixer 失败的图(约 6%)进路线二或手修。
|
||||
- 验证手段:pixel-bench(MIT)可用自有 1x 素材自建评测集,管线改动前后跑分对比。
|
||||
|
||||
### 路线二(零成本参照物+兜底):RD Pixel Art Fixer 网页/免费 API
|
||||
|
||||
- 用途一:**今天就拿一张现行管线不满意的图丢进网页版**(Standard 引擎,本地 WASM 不上传),参数 Color count=32、Dither matrix=4、strength=0——它给出的是"这张输入理论上能修到什么水平"的免费标杆,路线一的调参目标就是追平它。
|
||||
- 用途二:路线一对个别疑难图失败时的兜底(免费 API 10 次/分够批量兜底)。
|
||||
- 边界:Neural 引擎会上传服务器;32 色是色数不是指定色板,精确项目色板仍需 remap 一步。
|
||||
|
||||
### 路线三(细节保留向对照):PixelOE
|
||||
|
||||
- 轮廓扩张+对比度感知对"细节丢失"痛点针对性最强,Apache-2.0、有 ComfyUI 节点、8GB 无压力。
|
||||
- 接法:PixelOE 缩到目标档 → 固定色板 remap(dither=NONE)→ 清洗去翳(同路线一第 4-5 步)。
|
||||
- 短板:不估输入网格相位。用法是与路线一并跑 A/B,按敌种选优(细节多的怪如卓尔/蛛后试 PixelOE,色块平坦的怪用 fixer)。
|
||||
|
||||
### 明确出局
|
||||
|
||||
WuZongWei6/Pixelization(禁商用点名游戏)、RMBG-2.0(非商业门控)、filipemeneses/comfy_pixelization(无 LICENSE)、BetterPixelArtDownscale(无 LICENSE,想要先找作者要授权)、矢量描摹(原理不适用)、Pixelicious(本次无法核实)。
|
||||
|
||||
---
|
||||
|
||||
## §5 附:现行 `pixelize_candidates.py` 最小补丁清单(若不立即换装路线一)
|
||||
|
||||
按收益排序,每行独立可改:
|
||||
|
||||
1. `quantize(QUANT_COLORS, method=Image.MEDIANCUT)` 补 `dither=Image.Dither.NONE`——灭掉脏点最大单一来源(Pillow 默认开 FS 抖动)。
|
||||
2. `QUANT_COLORS` 64→32,或改 `quantize(palette=项目色板图, dither=NONE)` 直接对接冻结色板。
|
||||
3. `pixelize()` 开头加 `cv2.medianBlur(np.asarray(im), 3)`——JPEG 噪点前置清理(注意 medianBlur 在 RGB 上做,alpha 通道跳过)。
|
||||
4. BOX 到 4× + NEAREST ÷4 两段改为一次 `cv2.resize(dst, INTER_AREA)` 到目标尺寸——消掉"模糊图上随机相位点采样"的糊+走样复合伤。
|
||||
5. alpha 通道 MinFilter(3)+NEAREST 阈值改为:AREA 缩到目标 → 阈值 128 → 腐蚀 1px → 边界回填内部实色(edge_inpaint 保留)。
|
||||
|
||||
这五步不解网格相位(那是路线一的事),但能把现状痛点削掉大半,改动量 <30 行。
|
||||
|
||||
---
|
||||
|
||||
## §6 本次未找到/未能核实的(如实记录)
|
||||
|
||||
1. Pixelicious(pixelicious.xyz)功能与免费状态——调研网络对该域 DNS 异常+连接超时。
|
||||
2. Photoshop Mosaic 滤镜"只打块不降尺寸"的界面文案一手证据(helpx 403;UXP 文档无此条目)。
|
||||
3. ImageMagick 原生 Atkinson 支持——quantize usage 页无此方法,未找到公开证据,按"不支持"处理。
|
||||
4. 2025-2026 新出现的专用神经像素化模型——检索无新增,PixelOE(非神经)是唯一活跃增量。
|
||||
5. pixel-art-fixer 对 RGBA 输入的 alpha 处理细节——README 未写明,接入时对 alpha 单独通路处理(§4 路线一第 2 步的键控顺序即规避方案)。
|
||||
|
||||
## 关联文档
|
||||
|
||||
- 上游(生成端+后处理工具链初核):[pixel-grid-gen-research-2026-09-25.md](pixel-grid-gen-research-2026-09-25.md)(pixel-art-fixer/pixel-bench/ComfyUI 节点系/许可证红旗速查的首次核实在此)
|
||||
- 现行管线实现:[tools/pixelize_candidates.py](../../tools/pixelize_candidates.py)(v3,屏障法去底+BOX/NEAREST 两段缩放)
|
||||
- 模型对比(生成侧):[zimage-vs-qwen-pixel-lora-2026-09-25.md](zimage-vs-qwen-pixel-lora-2026-09-25.md)
|
||||
Reference in new issue
Block a user