news 2026/9/19 7:33:39

8种图形模式怎么选?Primitive 三角形/矩形/椭圆/贝塞尔对比与选型指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
8种图形模式怎么选?Primitive 三角形/矩形/椭圆/贝塞尔对比与选型指南

8种图形模式怎么选?Primitive 三角形/矩形/椭圆/贝塞尔对比与选型指南

【免费下载链接】primitiveReproducing images with geometric primitives.项目地址: https://gitcode.com/gh_mirrors/pr/primitive

Primitive 是一个用 Go 语言编写的几何图元重绘工具:它能用三角形、矩形、椭圆、贝塞尔曲线等几何图元,把一张普通照片逐块"画"成富有艺术感的抽象作品。整个算法一次只添加一个图形,50~200 个图形就能得到既 recognizable 又抽象的效果。本文带你快速搞懂它的8 种图形模式该怎么选、各适合什么照片。

🎨 原理速览:为什么"一次画一个图形"就够好?

算法的核心思路非常直观(详见 README.md 的 "How it Works" 一节):

  1. 用目标图的平均色铺满画布,作为"当前图";
  2. 随机生成一个图形,通过爬山优化不断微调它的形状参数(顶点、半径、角度);
  3. 用 RMSE(均方根误差)给每个图形打分,只保留让误差变小的调整;
  4. 找到最优图形后"钉"在画布上,再找下一个图形,循环往复。

所有候选图形都由多个并行 Worker 同时探索,取全局最优(多起点爬山,见 primitive/worker.go),这也是它比同类项目快的关键之一。

📋 8 种图形模式速查表

通过命令行参数-m指定模式,默认值是 1(三角形):

模式值图形特点适合的照片类型代价(相对)
0combo每轮随机混用各种图形通用、不想纠结时
1triangle三顶点多边形,表现力最强纹理复杂、细节多的图
2rect轴对齐矩形大面积色块、天空、墙面
3ellipse轴对齐椭圆人脸、圆形物体
4circle椭圆特例(两半径相等)光斑、颗粒、点缀
5rotatedrect可旋转矩形建筑、线性结构
6beziers二次贝塞尔曲线描边头发、线条、笔触感
7rotatedellipse可旋转椭圆有角度的圆润物体
8polygon默认 4 边形(可凹)不规则色块

💡 代价一栏指光栅化与优化的相对计算量趋势:矩形/椭圆按扫描线直接算,快;贝塞尔和旋转图形需要路径填充,稍慢。

🔍 重点模式深度对比

三角形(模式 1):默认首选,表现力天花板

三角形是唯一的"通用多边形"——三个顶点可以拼出几乎任何形状。Primitive 约束了每个内角必须 ≥15°,避免细长三角把画面画碎(见 primitive/triangle.go)。羽毛、毛发、树叶这类细碎纹理用它效果最好。

矩形(模式 2)与旋转矩形(模式 5):大面积色块之王

轴对齐矩形光栅化最快,扫过天空、墙壁、纯色背景非常高效;旋转矩形则多了角度参数,可以"斜着"贴合建筑与线条(长宽比限制在 5 以内,见 primitive/rectangle.go)。

椭圆(模式 3)、圆形(模式 4)与旋转椭圆(模式 7):圆润物体的三件套

三者共用同一套实现(圆形只是强制两半径相等),代码见 primitive/ellipse.go。椭圆光栅化是纯数学计算,速度很快;旋转椭圆多了角度,适合倾斜的果盘、车窗、眼睛等。

贝塞尔曲线(模式 6):给画面加"笔触"

模式 6 实际是一条带粗细的二次贝塞尔描边(见 primitive/quadratic.go),画出来像手绘线条,非常适合头发、水流、枝干。因为单条曲线覆盖面积小,官方建议配合-rep参数每轮追加多个曲线,收敛才够快。

多边形(模式 8)与混用模式(模式 0)

多边形默认生成 4 个顶点、允许凹形(见 primitive/polygon.go),比矩形灵活、比三角形省事。而 combo 模式最省心:每次迭代都会随机挑选一种图形来生成(分发逻辑在 primitive/worker.go),画面风格更丰富,新手可以无脑从它开始。

🧭 选型指南:按照片类型对号入座

你的照片是……推荐模式理由
人物肖像(头发多)6+-rep 2贝塞尔曲线还原发丝
风景 / 建筑 / 大面积色块52旋转矩形贴合结构,快且省图形
羽毛、树叶等细碎纹理1三角形表现力最强
圆形物体 / 光斑夜景43圆与椭圆最贴合
不想纠结0混用模式,通用效果稳

另外两个通用经验:人物照片-a(透明度)设为0,让算法自行决定每个图形的透明度,层次感更强;想要"一笔一笔画出来"的过程动画,输出.gif即可(需安装 ImageMagick)。

⚙️ 常用参数速查

参数默认作用
-i/-o必填输入 / 输出文件(可多个-o,同时出 PNG + SVG)
-n必填图形数量,50~200 起步,越多越接近原图
-m1图形模式(上表 0~8)
-a128透明度,设0让算法自选
-rep0每轮额外追加 N 个图形,贝塞尔模式建议调大
-r/-s256/1024输入缩放到 256px 处理、输出 1024px,提速又清晰
-j全部核心并行 Worker 数,CPU 核多就快
-v/-vv打印每帧分数,观察收敛过程

完整参数说明见 README.md 的 Command-line Usage 表格,核心调度逻辑在 primitive/model.go 的Step方法中。

🚀 一句话上手

安装 Go 后获取本项目源码,在仓库根目录用go build编译出可执行文件,然后:

./primitive -i input.png -o output.png -n 100 -m 0

想换风格?只改-m一个数字即可。从0跑一张图,再用上表对照切换模式,基本 10 分钟就能找到最适合你照片的"图形配方"。

(项目附带的 bot/main.py 展示了一个有趣的玩法:自动抓取新照片、随机参数重绘,让同一算法持续产出不同的几何图元作品,感兴趣可以翻翻源码找找灵感。)

【免费下载链接】primitiveReproducing images with geometric primitives.项目地址: https://gitcode.com/gh_mirrors/pr/primitive

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 7:32:48

基于SpringBoot与微信小程序的离校管理系统设计与实现

1. 项目背景与核心价值高校毕业生离校管理是高校行政工作中不可忽视的重要环节。传统纸质化办理模式存在效率低下、数据孤岛、流程繁琐等问题。每年毕业季,学生需要往返于各个部门盖章签字,耗时耗力;而学校管理人员也面临信息核对困难、数据统…

作者头像 李华
网站建设 2026/9/19 7:30:19

OpenCode 用 Glob 搜文件没反应?TaoToken 通道排查 /v1 是否多填

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 7:28:08

ESP32-P4 USB Host实战:从鼠标枚举到HID协议深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 7:27:44

兰州装修监理验房全流程与关键点解析

1. 兰州装修监理验房全流程解析作为一名在兰州从事装修监理工作多年的从业者,我深知本地装修市场的特点和业主们的痛点。兰州独特的气候条件和建筑特点,使得验房工作必须因地制宜。下面我就把多年积累的验房经验,结合兰州本地实际情况&#x…

作者头像 李华
网站建设 2026/9/19 7:27:07

SVG编辑工具选型指南:11款覆盖桌面、在线与代码级的实用工具拆解

做设计或前端的同学,手里没几个顺手的SVG编辑工具,真说不过去。SVG这东西,说难不难,说简单也不简单——它不像PNG那样导出来就是成品,矢量图形的背后是路径、节点、填充规则和viewBox这一整套逻辑。日常工作中&#xf…

作者头像 李华