njucm njucm.org
← Projects

拼豆图案生成器 · Perler Bead Studio

仓库:leerogerstheman/perler-bead-studio

把一张图片变成拼豆(拼拼豆豆 / Perler Beads)图纸:自由选择行×列(16×16、29×29、32×32,一直到 1024×1024), 自动把每个格子匹配成最接近的拼豆颜色,并统计每种颜色需要多少颗豆子。

界面是包豪斯(Bauhaus)风格:三原色 + 黑白、直角直线、方形色块按钮、粗细对比排版。

技术上是 Python + Tkinter + Pillow,核心算法(缩放、颜色匹配、Floyd–Steinberg 抖动、去背景)与 界面绘制分离,所以能跑无界面的自检脚本。

它能做什么

能力说明
尺寸任选4×4 ~ 1024×1024(最大约 105 万颗豆子),也支持长方形图案
颜色匹配内置标准 50 色 / 精简 32 色 / 极简 16 色三套色卡,按感知加权距离取最近色
颜色抖动标准 Floyd–Steinberg 误差扩散(顺序扫描,无横向条纹),渐变过渡自然
背景处理透明区域自动留空;纯色背景可从四边泛洪填充一键去掉,容差可调
智能裁剪自动去掉四周留白;长方形图片可选「完整放入 / 裁切填满 / 拉伸」
格式支持JPG / PNG / WEBP / BMP / GIF / TIFF / ICO 等 40+ 种,手机竖拍照片按 EXIF 自动转正
导出齐全圆豆图纸 PNG、矢量 SVG、成品效果图、挑豆清单 TXT、颗数 CSV、格子编号 CSV、可打印网页
实时预览鼠标悬停查看每格坐标与色号;适应窗口 / 1× ~ 5× 缩放

下载即用

下载后可用 SHA-256 对一下,确认拿到的是原封不动的那一份:校验和清单。

版本怎么选:推荐下第一个 full.zip——它自带 Python 运行时,解压就能跑,也不依赖网络。 exe 单文件更省事但每次启动要自解压、稍慢,且需要从 GitHub 下载。两个版本功能完全一样。

📦 本站提供的 full.zip 是精简便携版:功能与官方包完全一致(已通过自带自检), 只是去掉了工具用不到的大型依赖库,体积更小、解压更快。 官方完整版(含全部依赖,49.4 MB)见 GitHub Releases。

这个软件开源免费,不收取任何费用。首次启动会弹出这条声明,勾选「不再显示」后不再打扰。

想直接从 GitHub 拿文件、或看历史版本:Releases

从源码运行(开发者)

git clone https://github.com/leerogerstheman/perler-bead-studio.git
cd perler-bead-studio
pip install pillow
python studio.py

也可以直接双击 启动.bat,它会自动寻找电脑上的 Python 环境并检查依赖 (会跳过微软商店的占位程序)。找不到可用环境时会打印中文安装指引,而不是闪退。

打包

构建EXE.bat                    :: 打包成单个 exe,需要先 pip install pyinstaller
powershell -ExecutionPolicy Bypass -File deploy_runtime.ps1   :: 生成免安装完整包

使用方法

基本流程

  1. 点左侧「浏览…」选一张图片,或点「示例图片」先试玩
  2. 用「常用尺寸」下拉框或「列 / 行」输入框选择格子数(4 ~ 1024)
  3. 右侧实时显示拼豆图纸;鼠标移到图纸上可看到每格的坐标与色号
  4. 点「导出全部文件」,在 导出\<图片名>_<列>x<行>\ 里得到全套图纸

长方形图片怎么办(关键选项)

任何长宽比的图都能用,程序按「先等比缩放,再放进格子」处理。第三步有三种做法:

选项处理逻辑结果什么时候用
完整放入(留白)等比缩小到整张图都能放进格子,短边居中留空不裁掉任何内容,空白格不放豆子想保留整张图,或背景本身是画面的一部分
裁切填满等比放大到铺满格子,长边多出的部分裁掉没有空格,豆子占满整块想让主体尽量大、不要留白(做挂件最常用)
拉伸(会变形)直接按 列×行 重采样,不做等比没有空格,但人物会变胖/变瘦一般不建议

举例:一张 16:9 横图 → 32×32:

  • 完整放入 → 实际占 32 列 × 18 行,上下各留 7 行空格,576 颗豆子
  • 裁切填满 → 铺满 32×32,左右各省掉一部分,1024 颗豆子

「裁切位置」有居中 / 靠上(留头部)/ 靠下 / 靠左 / 靠右,只在裁切填满时可用。 竖图转方图时选「靠上」最容易留住人脸。

快捷键与视图

操作说明
Ctrl+O选择图片
Ctrl+S导出全部
F5重新生成
Esc取消输入焦点
缩放「适应 / 1× / 2× / 3× / 5×」,1×=12px、2×=24px、3×=36px、5×=60px 每格
图纸模式「圆豆子图纸」摆豆子用;「成品像素效果」是去掉网格的预览

预览会自动降级:超过 26,000 格时,界面预览和导出改用纯色格子画法(百万格也是秒级); 但导出的 PNG 仍是完整圆豆图纸。

怎么选行列数

尺寸适合
16×16 / 24×24钥匙扣、挂件,图案要大要简单
29×29 / 32×32一块标准小方板,卡通头像、图标最合适
48×48 / 58×58一块大方板,人物、宠物照片能看出表情
64×64 ~ 128×128细节丰富,适合照片;豆子用量开始变大
256×256 ~ 1024×1024「大工程 / 像素画」级别,几百到上百万颗豆子

程序会提示「原图每格约多少像素」,每格不足 6 像素时细节会明显丢失,可以考虑加大行列数。 反过来,设了 1024×1024 但原图只有 640×640,图案会偏糊。

导出与挑豆

文件用途
*_图纸.png圆豆子图纸,带行列坐标和 5 格粗网格线,照着摆豆子用
*_矢量图纸.svg矢量版,放大打印不模糊(超大图自动跳过)
*_效果图.png去掉网格的成品效果
*_豆子清单.txt挑豆子用的勾选清单,可直接打印
*_豆子清单.csv每色颗数(Excel 可打开,用于买豆子)
*_格子编号.csv每格的颜色编号表,方便逐行核对
*_网页图纸.html浏览器打开,带图例和颜色表,可直接打印

超大图案会自动跳过 SVG 和 HTML 导出(4 万格以上不导 SVG,40 万格以上不导 HTML), 否则文件会有几十上百 MB、浏览器打不开。

自定义色卡

在 palettes\ 里新建一个 .json:

{
  "名称": "我的拼豆色卡",
  "colors": [
    ["白色", "#FFFFFF"],
    ["大红", "#D62828"],
    ["宝蓝", "#1B5FC1"]
  ]
}

保存后重启程序,在界面「色卡」下拉框里就能选到。

性能实测

尺寸格数转换耗时开抖动耗时适合
64 × 644,0960.01s0.02s挂件、头像
256 × 25665,5360.07s0.10s大幅面作品
512 × 512262,1440.23s0.36s接近像素画
1024 × 10241,048,5760.94s1.51s最大档

1024×1024 约需 1296 块 29×29 拼豆板,动手前建议先看「豆子清单」估一下成本。

运行环境

只需要 Python 3.10+ 和 Pillow:

pip install pillow

常见问题

图案看着很糊 / 颜色不对? 尽量用清晰、主体大、背景干净的图;勾选「去掉纯色背景」和「自动裁剪留白」;照片类建议开「颜色抖动」。

想要更多渐变层次? 换「标准色卡(50 色)」并打开「颜色抖动」。想让图案更像素风,就选极简 16 色并关掉抖动。

背景被误删了,或没删干净? 调整「容差」滑块:误删就调小,没删干净就调大;也可以取消「去掉纯色背景」。

豆子数量怎么看? 右侧「豆子用量清单」实时显示每色颗数;导出后 *_豆子清单.csv 可按颜色去买豆子。


颜色值为屏幕显示近似值,不同品牌(Hama / Perler / Artkal)同色号会有轻微差异,成品以实物为准。