vpype
vpype 是绘图矢量图形的瑞士军刀命令行工具。
目录
vpype 是什么?
vpype 是绘图矢量图形的瑞士军刀命令行工具。以下是它的功能:
- 对现有矢量文件进行精确的位置、比例和页面格式控制的布局;
- 优化现有SVG文件以实现更快速、更清晰的绘图;
- 为老式绘图仪创建HPGL输出;
- 通过内置命令或插件从头开始创建生成艺术作品;
- 创建、修改和处理多层矢量文件以进行多色绘图;
- 以及更多...
vpype 高度可扩展,通过插件可以大大扩展其功能。例如,已经存在用于绘制像素艺术、 用阴影进行半色调处理等的插件。请参阅下面的现有插件列表。
vpype 也是一个文档完善的Python库, 对创建生成艺术和绘图仪工具很有用。它包括数据结构、实用程序和I/O函数,以及 硬件加速的灵活矢量图形查看器。例如,绘图仪生成艺术环境 vsketch就是基于 vpype 构建的。
查看文档以获取更全面的 vpype 介绍。
它是如何工作的?
vpype 通过构建所谓的_命令_的_管道_来工作,其中每个命令的输出被输送到下一个命令的输入。
一些命令将几何图形加载到管道中(例如 read
命令从SVG文件加载几何图形)。其他命令修改这些几何图形,例如通过
裁剪(crop
)或重新排序以最小化笔抬起
移动(linesort
)。最后,一些其他命令
仅读取管道中的几何图形以用于显示目的(show
)
或输出到文件(write
)。
管道是使用 vpype 的CLI(命令行界面)在终端中定义的,方法是输入 vpype
后跟
命令列表,每个命令都带有其可选参数和参数:
这个流程使用五个命令(以粗体显示):
read
从SVG文件加载几何图形。linemerge
合并端点相近的路径(在给定的容差范围内)。linesort
重新排序路径,以最小化笔抬起的移动距离。crop
进行裁剪。write
将生成的几何图形导出为SVG文件。
vpype 中还有许多其他可用的命令,请参阅下方的概览。
一些命令有必需的参数(以斜体显示)。例如,read
命令必须提供文件路径,crop
命令必须提供尺寸。命令也可能有可选项。在本例中,--page-size a4
表示write
命令将生成A4大小的SVG(否则它将与_in.svg_的大小相同)。同样,因为使用了--center
,所以write
命令在保存SVG之前会将几何图形居中(否则几何图形将保持在原始位置)。
示例
注意:以下示例使用行尾转义符(\
)分布在多行上。这样做是为了突出显示管道由哪些命令组成,在实际使用中通常不会这样做。
加载SVG文件,将其缩放到特定大小,并将其居中导出到A4大小的、可直接绘图的SVG文件中:
$ vpype \
read input.svg \
layout --fit-to-margins 2cm a4 \
write output.svg
优化路径以减少绘图时间(合并相连的线条,排序以最小化笔抬起距离,随机化闭合路径的接缝,并减少节点数):
$ vpype \
read input.svg \
linemerge --tolerance 0.1mm \
linesort \
reloop \
linesimplify \
write output.svg
加载SVG并在vpype的查看器中显示(可以仔细检查图层和路径结构):
$ vpype \
read input.svg \
show
加载多个SVG文件并将它们保存为单个多层SVG文件(例如用于多色绘图):
$ vpype \
forfile "*.svg" \
read --layer %_i% %_path% \
end \
write output.svg
将SVG导出为HPGL格式,用于老式绘图仪:
$ vpype \
read input.svg \
layout --fit-to-margins 2cm --landscape a4 \
write --device hp7475a output.hpgl
在SVG上绘制图层名称(此示例使用属性替换):
$ vpype \
read input.svg \
text --layer 1 "{vp_name}" \
write output.svg
将多个SVG文件合并到网格布局中(此示例使用表达式替换):
$ vpype \
eval "files=glob('*.svg')" \
eval "cols=3; rows=ceil(len(files)/cols)" \
grid -o 10cm 10cm "%cols%" "%rows%" \
read --no-fail "%files[_i] if _i < len(files) else ''%" \
layout -m 0.5cm 10x10cm \
end \
write combined_on_a_grid.svg
上一个示例的交互版本可在examples/grid.vpy
中找到。它使用input()
表达式向用户询问参数:
$ vpype -I examples/grid.vpy
Files [*.svg]?
Number of columns [3]? 4
Column width [10cm]?
Row height [10cm]? 15cm
Margin [0.5cm]?
Output path [output.svg]?
将SVG按图层拆分为多个文件:
$ vpype \
read input.svg \
forlayer \
write "output_%_name or _lid%.svg" \
end
更多示例和方法可以在cookbook中找到。
vpype 不是什么?
vpype 专注于绘图仪生成艺术,并不旨在成为通用的(如Illustrator/InkScape)矢量图形工具。其主要原因之一是_vpype_将所有曲线(圆形、贝塞尔曲线等)转换为由小段线条组成的线。_vpype_确实导入了元数据,如描边和填充颜色、描边宽度等,但只部分使用它们,并不旨在与SVG规范保持完全一致。这些设计选择使_vpype_的丰富功能成为可能,但限制了它在印刷媒体等方面的使用。
安装
详细的安装说明可在最新文档中找到。 摘要:
- 推荐使用 Python 3.12,但 vpype 也兼容 Python 3.10 和 3.11。
- vpype 发布在 Python 包索引 上,可以使用 pipx 安装:
pipx install "vpype[all]"
- 这里 提供了 Windows 安装程序,但使用此方法无法安装插件。
- 可以使用以下命令安装仅包含命令行界面的 vpype 版本:
此版本不包含pipx install vpype
show
命令,但不需要在某些平台上难以或无法安装的依赖项(如 matplotlib、PySide6 和 ModernGL)。
文档
vpype 命令行界面包含自身的详细文档:
vpype --help # 通用帮助和命令列表
vpype COMMAND --help # 特定命令的帮助
此外,在线文档 提供了关于 vpype 基本原理的广泛背景信息、涵盖大多数常见任务的操作指南、vpype API 文档等更多内容。
功能概览
通用
- 易于使用的命令行界面,具有集成帮助(
vpype --help
和vpype COMMAND --help
)和支持任意单位(例如vpype read input.svg translate 3cm 2in
)。 - 一流的多层支持,具有全局或每层处理功能(例如
vpype COMMANDNAME --layer 1,3
)和可选的概率性图层编辑命令(lmove
、lcopy
、ldelete
、lswap
、lreverse
)。 - 支持每层和全局属性,作为元数据,被多个命令和插件使用。
- 支持命令行用户输入中的属性和表达式替换。
- 支持复杂的每层处理(
perlayer
)。 - 强大的硬件加速显示命令,具有可调整的单位、可选的每线着色、可选的笔抬轨迹显示和每层可见性控制(
show
)。 - 几何统计提取(
stat
)。 - 支持命令历史记录(
vpype -H [...]
)。 - 支持生成插件的随机数生成器种子配置(
vpype -s 37 [...]
)。
输入/输出
- 单层和多层 SVG 输入,具有可调整的精度、大型 SVG 的并行处理,支持百分比或缺失宽度/高度(
read
)。 - 支持 SVG 输出,具有精细的布局控制(页面大小和方向、居中)、图层支持和自定义图层名称、可选的笔抬轨迹显示、各种着色选项(
write
)。 - 支持基于配置的 HPGL 输出生成,具有精细的布局控制(页面大小和方向、居中)。
- 支持基于模式的文件集合处理(
forfile
)。
布局和变换
- 简单灵活的布局命令,用于居中和适应边距,可选择水平和垂直对齐(
layout
)。 - 页面旋转命令(
pagerotate
)。 - 强大的变换命令,用于缩放、平移、倾斜和旋转几何图形(
scale
、translate
、skew
、rotate
)。 - 支持任意尺寸的缩放和裁剪(
scaleto
、crop
)。 - 支持任意数量的几何图形修剪(
trim
)。 - 任意页面大小定义(
pagesize
)。
元数据
- 调整图层的颜色、透明度、笔宽和名称(
color
、alpha
、penwidth
、name
)。 - 应用预设或完全自定义的笔配置(
pens
)。 - 操作全局和每层的属性(
propset
、propget
、proplist
、propdel
、propclear
)。
绘图优化
- 线条合并,支持可选的路径反转和可配置的合并阈值(
linemerge
)。 - 线条排序,支持可选的路径反转(
linesort
)。 - 可调节精度的线条简化(
linesimplify
)。 - 闭合路径的接缝位置随机化,以减少笔抬起/落下的痕迹(
reloop
)。 - 支持对每条线生成多次通过(
multipass
)。
滤镜
- 支持按线长或闭合性进行过滤(
filter
)。 - 扭曲滤镜,用于手抖或液体般的风格效果(
squiggles
) - 支持将所有线条拆分为其组成段(
splitall
)。 - 支持反转图层内路径的顺序(
reverse
)。 - 支持按绘制距离拆分图层(
splitdist
)
生成
- 生成任意基本图形,包括线条、矩形、圆形、椭圆和弧线(
line
、rect
、circle
、ellipse
、arc
)。 - 使用内置的赫西字体生成文本(
text
) - 生成网格状布局(
grid
)。 - 在几何图形周围生成边框(
frame
)。 - 生成用于调试/学习目的的随机线条(
random
)
可扩展性和API
-
对插件扩展的一流支持(例如 vpype-text、hatched、occult)。
-
支持基于脚本的生成(
script
)。 -
为插件和其他绘图仪生成艺术项目提供强大且文档完善的API。
插件
以下是已知的vpype插件列表(如果您的插件未列出,请提交拉取请求):
-
vsketch:vsketch是使用vpype的API实现的绘图仪生成艺术家的完整框架
-
vpype-perspective:为您的艺术作品添加透视效果
-
vpype-pixelart:绘制像素艺术
-
hatched:使用阴影线进行半色调处理
-
vpype-flow-imager:将图像转换为基于流线的设计
-
occult:执行隐藏线消除
-
deduplicate:删除重复线条
-
vpype-explorations:我个人的实验和工具集合
-
vpype-gcode:灵活的gcode和其他基于文本格式的导出命令
-
vpype-dxf:读取dxf文件
-
vpype-embroidery:各种刺绣相关工具,包括读取/写入大多数刺绣格式
-
vpype-vectrace:通过矢量追踪从图像创建轮廓
-
vpype-ttf:使用TTF字体创建文本轮廓
贡献
欢迎为本项目做出贡献,这并不一定需要软件开发技能!请查看文档中的贡献部分以获取更多信息。
许可证
本项目采用MIT许可证 - 详情请参阅LICENSE文件。