1个不稳定版本
0.2.1 | 2023年1月18日 |
---|
#759 in 图像
48 每月下载量
32KB
682 行
SVG Path Simplifier
svgps
程序将 .svg
图像转换为包含在 .svgcom
文件中的 MoveTo/LineTo/CubicBezierTo 命令。
最初的目标是为了使SVG对于绘图仪来说更加美观和简化。
它使用 usvg 进行SVG解析和简化,以及 kurbo 进行几何计算。
演示
XXXXXXXXXXXXXXXXX |
XXXXXXXXXXXXXXXXX |
XXXXXXXXXXXXXXXXX |
---|---|---|
原始SVG | 已转换 | 已转换+自动裁剪 |
请参阅 demo/gen.sh。
功能
- 从
.svg
生成.svgcom
- 将
.svgcom
渲染为.svg
以进行预览 - 仅选择转换的描边路径
- 自动裁剪因被其他图形覆盖而不可见的路径段(将其视为深度测试)
用法
svgps help generate # Try this first to see all the options
svgps generate INPUT.svg OUTPUT.svgcom [OPTIONS...]
svgps render INPUT.svgcom OUTPUT.svg [OPTIONS...]
自动裁剪行为
-a
(--autocut
) 标志使程序裁剪输入SVG图像中包含的路径的覆盖段。
只有闭合填充路径才能覆盖其他路径。
SvgCom格式
SvgCom是一种用于矢量图形轮廓表示的文本格式,大量借鉴了SVG的 <path:d>
格式。
文件扩展名为 .svgcom
。
文件内容的形式为
<viewbox_width: uint32>
<SPACE>
<viewbox_height: uint32>
<SPACE>
<number_of_commands: uint32>
<SPACE>
<number_of_coordinates: uint32>
<EOL>
<command: "M" | "L" | "C">... (not delimited)
<EOL>
<coordinate: float64>... (delimited by <SPACE>)
[<EOL> <garbage: text>]
其中 <EOL>
是 <LF>
,不是 <CR><LF>
,而 <SPACE>
是一个 单个 ASCII 空格。
文件末尾的附加(垃圾)行是可选的,并且转换器永远不会读取这些行。
坐标列表指定了二维点的坐标,因此坐标的数量必须是偶数。
示例 0
示例.svgcom
720 480 2 4
ML
0 0 100 100
此文件定义了一个大小为 720
x480
的图像,包含 2
个命令(M
ove 和 L
ine)和 4
个坐标(0.0
,0.0
,100.0
,100.0
),这两个坐标构成两个点。
示例 1
输入.svg
<?xml version="1.0" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 200">
<!-- Z is converted to L -->
<path stroke="#000000" fill="none" d="M 0 0 L 100 0 L 100 70 L 0 70 Z"/>
</svg>
输出.svgcom
250 200 5 10
MLLLL
0 0 100 0 100 70 0 70 0 0
示例 2
输入.svg
<?xml version="1.0" standalone="no"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600">
<!-- Hidden elements are removed -->
<path stroke="#000000" visibility="hidden" fill="none" d="M 0 0 L 100 0 L 100 70 L 0 70 Z"/>
<!-- Groups are flattened -->
<g>
<!-- Transforms are resolved -->
<g transform="translate(0 0)">
<!-- All shapes are converted to paths -->
<ellipse cx="100" cy="100" rx="50" ry="60"/>
</g>
</g>
</svg>
输出.svgcom
800 600 5 26
MCCCC
150 100 150 133.1370849898476 127.61423749153967 160 100 160 72.38576250846033 160 50.00000000000001 133.1370849898476 50 100.00000000000001 49.99999999999999 66.86291501015242 72.38576250846032 39.99999999999999 99.99999999999999 39.999999999999986 127.61423749153965 39.99999999999997 150 66.86291501015239 150 100
依赖项
~4.5MB
~91K SLoC