使用方法
- 点击 选择照片,或把图片拖到方框中。照片在您的设备上读取。
- 选择 颜色数。六到十种颜色适合大多数照片;颜色越多,细节越多,需要购买的颜料也越多。
- 选择 最小区域,然后点击 生成图稿。大图片可能需要一分钟。
- 读取 色板,然后用 下载轮廓图(PNG) 保存轮廓图以便打印,或用其旁边的按钮保存颜色预览。
图稿如何生成
每个像素都会通过 CIE L*a*b* 颜色空间中的 k-means 聚类,与颜色相近的像素归为一组。L*a*b* 中的距离与人眼的感觉相符。初始分组采用 k-means++ 方法,并使用固定的随机种子,因此同一张照片总能得到同一幅图稿。
随后,细小区域会并入与其共享边界最长的相邻区域,使图稿上不存在过于细小、无法上色的斑点。同一颜色的每个连通区域即为一个区域。颜色按出现频率从多到少编号,每个区域取其颜色的编号。轮廓沿区域的边缘画出。
颜色:CIE L*a*b* 中的 k-means,颜色数为您所选的数目
细小区域:并入共享边界最长的相邻区域
编号位置:离其区域每条边都最远的像素
- 图稿由不超过长边800像素的副本生成;轮廓按其两倍的尺寸画出,因此打印清晰。
- 每个区域的编号用距离变换放置。距离变换给出每个像素到最近边缘的距离,编号放在该距离最大的位置。
打印与上色
打印轮廓图,然后用编号对应的颜料填涂每个区域。1号是最常见的颜色,覆盖的面积最大;在一种颜色接触下一种颜色之前,请先让它干透。
过窄、写不下编号的区域会不带编号。要为更多区域编号,请选择更大的最小区域或更少的颜色;要保留更多细节,请选择精细设置,并接受更多狭窄的区域。
计算示例:一半红色、一半蓝色
一张 20 × 10像素的图片,左半为红、右半为蓝,颜色数为2,得到两个各100像素的区域。轮廓是中间的一条线:每行一个像素,共十个。
每个区域的编号放在它最宽的位置。在红色一半中,最宽处距每条边都是四个像素,位于 (4, 4);在蓝色一半中位于 (14, 4),同样距边缘四个像素。
| 项目 | 结果 |
|---|---|
| 区域 | 2 |
| 轮廓像素 | 10,每行一个 |
| 编号位置 | (4, 4) 和 (14, 4) |
| 色板 | #FF0000与 #0000FF,各100像素 |
常见问题
为什么有的区域没有编号?
比编号还窄的区域写不下数字,因此图稿让它不带编号。请选择更大的最小区域或更少的颜色,使每个区域都足够宽,能容纳它的编号。
为什么每次的结果都相同?
颜色从固定的起点分组,因此同一张照片、同样的颜色数和最小区域,总会得到同样的图稿和色板。
应该选择多少种颜色?
六到十种颜色适合大多数照片,并使图稿易于辨认。儿童的图稿可以用较少的颜色,细致的照片则可以用更多颜色,但要记住每种颜色都是一种需要购买的颜料。
我的照片会被上传吗?
不会。照片由您的浏览器读取,图稿由您设备上的工作脚本生成。任何内容都不会发送给我们;如果处理时间超过一分钟,工作就会停止。
最小区域是什么设置?
它是作为独立区域保留的最小面积,以占图片的比例表示。较小的区域会并入相邻区域,使图稿更容易上色。
资料来源
- Wikipedia:Distance transform(英文),每个像素到最近边缘的距离
- Wikipedia:K-means++(英文),Arthur 与 Vassilvitskii(2007)的 k-means 谨慎初始化
- Wikipedia:CIELAB colour space(英文),L*a*b*,用于颜色分组
数据和文字最近核对于2026年11月10日星期二。