Pindou Chart(拼豆色号施工图)
Overview
输入任意图片,输出一套可直接照着拼的「色号施工包」。默认输出三件套:
- 色号标注施工图(
*_annotated.png):标题栏 + 四周行列坐标(第 1 格及每 10 格标注)+ 加重网格线 + 格内色号 + 底部「色号统计」图例(色块 + 色号 + N 颗,右下角总计)。默认 30px 格宽,文字清晰可读。版式对齐 pindou.348349.xyz 的图纸样式。 - 纯色吸附图(
*_quantized.png):1 像素 = 1 格的纯色吸附图。 - 用量清单 CSV(
*_usage.csv):每个 MARD 色号的颜色 HEX、名称、所需珠子数量(颗)、占比、品牌,按用量降序,UTF-8 BOM(Excel 直接打开不乱码)。
按需输出(用户明确要求时加 --with-palette):
- 调色板 CSS / JSON(
*_palette.css|json):色号变量与结构化数据(code/name/hex/count/ratio)。
与 pindou-pattern(把像素画/图纸数据渲染成图纸)互补:本 skill 的输入是任意图片,自动完成色号吸附。
环境
依赖 Pillow + numpy,用 WorkBuddy 托管的技能隔离 venv(不要用系统 Python):
# 技能隔离环境 Python:Windows(Git Bash)用 Scripts/python.exe,macOS/Linux 用 bin/python
PY="$HOME/.workbuddy/binaries/python/envs/default/Scripts/python.exe" # Windows
# PY="$HOME/.workbuddy/binaries/python/envs/default/bin/python" # macOS/Linux
S="$HOME/.workbuddy/skills/pindou-chart/scripts"
"$PY" "$S/quantize.py" --help
venv 不存在或缺依赖时先建(Python 版本号从 versions 目录实际内容取,不要写死):
PYROOT="$HOME/.workbuddy/binaries/python"
PYVER=$(ls "$PYROOT/versions" | tail -1)
"$PYROOT/versions/$PYVER/python.exe" -m venv "$PYROOT/envs/default" # Windows
# macOS/Linux: "$PYROOT/versions/$PYVER/bin/python3" -m venv "$PYROOT/envs/default"
"$PYROOT/envs/default/Scripts/python.exe" -m pip install Pillow numpy
快速开始
PY="$HOME/.workbuddy/binaries/python/envs/default/Scripts/python.exe" # Windows;macOS/Linux 用 bin/python
S="$HOME/.workbuddy/skills/pindou-chart/scripts"
"$PY" "$S/quantize.py" art.png --max-side 72 --outdir ./out # 长边 72 格,MARD 色号,默认三件套
"$PY" "$S/quantize.py" art.png --title 蜘蛛侠 --outdir ./out # 施工图标题栏写「蜘蛛侠」
"$PY" "$S/quantize.py" art.png --max-side 72 --mirror h # 左右镜像出图,文字保持正常可读
"$PY" "$S/quantize.py" photo.jpg --spec 78 --white-as-empty # 白底当空格,白豆不计用量
"$PY" "$S/quantize.py" art.png --spec 90 --with-palette # 任意规格 + 额外导出调色板 CSS/JSON
"$PY" "$S/quantize.py" art.png --brand COCO --max-colors 221 # 换色号体系
支持传目录 + -r 批量;--json 出结构化报告。
决策规则(把用户的话翻译成参数)
| 用户说法 | 处理 |
|---|---|
| 「N×N / 拼豆 N 格」 | --spec N 接受任意正整数(长边格数,与 --max-side 互斥);52/78/104 是三种常用豆板规格,可向用户提示,但不必拘泥于此三档,用户要几格就给几格 |
| 「要调色板 CSS / JSON」 | --with-palette(默认不导出调色板,仅默认三件套:施工图 + 吸附图 + CSV) |
| 「标题写 XX」 | --title XX(默认取文件名;--title '' 隐藏标题栏) |
| 「格宽大点 / 文字看不清」 | --annotate-cell(默认 30,<20 会难辨认) |
| 「白色当空格,别买白豆」 | --white-as-empty(配合用户偏好:白底主体图背景留空) |
| 「镜像 / 左右翻转图纸」 | --mirror h(默认语义为左右镜像;镜像的是格子数据,色号/坐标/标题/图例在翻转后渲染,文字正常可读) |
| 「上下翻转」 | --mirror v;两个方向都要 --mirror hv。镜像产物文件名带 _mirh/_mirv/_mirhv 后缀,不覆盖原图 |
| 「用 COCO / 漫漫 / 盼盼 / 咪小窝 色号」 | --brand(默认 MARD) |
| 「最多 N 色」 | --max-colors N(默认上限 221;MARD 色卡 221 色可满额,COCO/漫漫/盼盼/咪小窝 各 205 色) |
| 「不要统计图例 / 不要坐标」 | --no-legend / --no-coordinates |
常见坑
- 内置色卡 221 色(MARD):MARD 采用 pindou.online 的 221 色系统编码(A1…M15,不补零,来源 https://www.pindou.online/colors );COCO/漫漫/盼盼/咪小窝 仍为 colorData.js 的 205 色编码,且新 221 色中的 16 色(M 系全部 + H23)没有这四个品牌的色号,会回退显示 HEX。旧版 205 色卡备份在
assets/palette-pindou.mard205-backup.json。 - CSV「名称」列:内置色卡没有颜色中文名,名称列默认等于色号(如 D4);色卡 JSON 颜色带
name字段则自动采用。 --spec是长边语义:非正方形原图输出仍是长方形;要严格正方形需用户确认后裁剪。- 默认只缩不放、不覆盖原图:输出另存副本到
--outdir。 - 不做抖动:每格一颗豆的离散结果,加抖动不可施工。
- 镜像不改用量:镜像只翻转格子位置,各色号颗数、CSV/图例与原图完全一致;文字类元素一律在翻转后绘制,永不出镜镜像字。
- 超大图(>4000px):先压缩再限定色号,速度更快、结果几乎一致。
- 用户没给目标格数时,问清楚要几格(或默认 72,符合其常用规格)。
Resources
scripts/quantize.py— 全部实现:色号吸附(Lab/RGB)、色数上限、施工图渲染(标题栏/坐标/网格/格内色号/图例)、CSV/CSS/JSON 导出。完整参数表见references/quantize-reference.md。assets/palette-pindou.json— 内置拼豆色卡快照:MARD 为 pindou.online 的 221 色系统(A1…M15),COCO/漫漫/盼盼/咪小窝 为 colorData.js 的 205 色;旧版全 205 色备份在同目录palette-pindou.mard205-backup.json。- 色卡数据声明:色号对照数据来源为 pindou.online(MARD 221 色)与 pindou-pattern 的 colorData.js(COCO/漫漫/盼盼/咪小窝 205 色),仅供个人拼豆拼砌参考,不属于本技能原创内容,请勿用于商业再分发。
references/usage-guide.md— 用户操作说明(搜索引用技能 → 上传图纸 → 输入命令 → 镜像 → 获取输出的完整流程与参数速查),用户询问「怎么用」时展示或指给它。references/quantize-reference.md— 完整参数表、施工图版式说明、匹配算法、产物格式与换色卡方法。