Coding

svg-composer

Try it

SVG 拼接工具,支持内置 FontAwesome 字符集(0-9, A-Z)和四种拼接模式

What it does

1. **内置字符集**(零依赖):直接拼接 、 等字符 2. **自定义符号**:从外部 SVG 文件加载符号进行拼接

The skill document

SVG 拼接工具 (svg-composer)

将 SVG 符号进行横向/纵向拼接,支持内置字符集和四种拼接模式。

技能概述

本技能封装了 SVG 布局拼接核心功能,支持两种使用方式:

  1. 内置字符集(零依赖):直接拼接 0-9A-Z 等字符
  2. 自定义符号:从外部 SVG 文件加载符号进行拼接

适用场景

  • 图标/符号批量拼接(如数字、字母组合)
  • 复合图标制作(多符号排列)
  • Logo/徽章设计(多元素组合)
  • 密码本/验证码生成(全排列组合)

内置字符集

Font Awesome Free(默认)

来源@fortawesome/fontawesome-free v7.2.0 许可:CC BY 4.0 + SIL OFL 1.1 + MIT 支持字符0-9A-Z(共36个) 输入处理:小写字母自动转为大写

特性

  • viewBox 高度统一为 512,宽度各异(256/320/384/448/576)
  • 每个字符有独立的 advance_ratio,间距计算精确
  • Y=0 在顶部(标准 SVG 坐标系)

许可证说明: 所有生成的 SVG 文件内部包含归属声明注释:

<!-- Icons provided by Font Awesome Free (CC BY 4.0) https://fontawesome.com/license/free -->

查看 SVG 源码即可看到完整许可证信息。

颜色支持

仅支持两种颜色

颜色名十六进制说明
black#000000黑色(默认)
white#FFFFFF白色

输入 fill 参数时接受:

  • 颜色名称:"black""white"
  • 十六进制:"#000000""#FFFFFF"

核心函数

1. compose_text - 基础拼接(推荐)

直接拼接文本字符串,无需外部 SVG 文件。

参数说明

参数类型默认值说明
textstr要拼接的文本,如 "ABC123"
directionstr'horizontal'拼接方向:'horizontal' / 'vertical'
canvas_sizetuple(640, 640)画布尺寸
marginfloat/int0字符间距(像素)
alignstr'center'对齐方式:'center' / 'start' / 'end'
fillstr'black'填充颜色:'black''white'
font_height_ratiofloat0.8字体高度占画布比例
charsetstr'fa'字符集:'fa'(默认)

返回值:SVG 字符串

2. compose_sequence - 模式1:仅顺序

拼接输入顺序的文字,不做任何排列组合。

示例

# 输入 "ABC" -> 输出 SVG("ABC")
svg = compose_sequence("ABC", fill="black")

3. compose_permutations - 模式2:全排列

输入字符的全排列(不重复组合)。

示例

# 输入 "ABC" -> 输出 6 个 SVG: "ABC", "ACB", "BAC", "BCA", "CAB", "CBA"
svg_list = compose_permutations("ABC", fill="black")
# svg_list = [svg_abc, svg_acb, svg_bac, svg_bca, svg_cab, svg_cba]

4. compose_combinations - 模式3:笛卡尔积

可重复组合(密码本模式),生成所有可能的重复排列。

示例

# 输入 "ABC", length=3 -> 输出 27 个: AAA, AAB, AAC, ABA, ABB, ABC... CCC
svg_list = compose_combinations("ABC", length=3, fill="black")

5. compose_limited - 模式4:限制长度

限制每个组合的长度,生成所有长度的全排列。

示例

# 输入 "ABC", limit=2 -> 输出 12 个: A, B, C, AB, AC, BA, BC, CA, CB
svg_list = compose_limited("ABC", limit=2, fill="black")

6. layout_elements - 布局拼接

将多个 SVG 符号横向或纵向拼接成一个 SVG。

参数类型默认值说明
elementslist元素列表 {'d': path_d, 'bbox': (...) }
directionstr'horizontal''horizontal' / 'vertical'
canvas_sizetuple(640, 640)画布尺寸
marginfloat/int0元素间距
alignstr'center''center' / 'start' / 'end'
fillstr'black''black''white'

7. load_symbols - 加载自定义符号

从文件夹批量加载 SVG 符号。

参数说明

参数类型说明
symbol_dirstr符号文件夹路径(包含 .svg 文件)

返回值:字典 {symbol_name: {'d': path_d, 'bbox': (xmin,xmax,ymin,ymax)}}

8. compose_number - 外部符号拼接(兼容)

使用外部 SVG 符号文件组合字符串(来自用户提供代码)。

参数类型说明
targetstr目标字符串,如 "A10"
symbol_filesdict{字符: SVG文件路径}
fillstr'black''white'
marginint符号间距(像素),默认 0

使用示例

示例 1:基础拼接(黑色)

from svg_composer import compose_text

svg = compose_text("HELLO2026", fill="black", font_height_ratio=0.85)

with open('hello2026_black.svg', 'w', encoding='utf-8') as f:
    f.write(svg)

示例 2:白色文字

svg = compose_text("HELLO2026", fill="white", font_height_ratio=0.85)

with open('hello2026_white.svg', 'w', encoding='utf-8') as f:
    f.write(svg)

示例 3:纵向排列

svg = compose_text(
    "ABC",
    direction='vertical',
    canvas_size=(400, 600),
    margin=20,
    fill='white',
    font_height_ratio=0.7
)

with open('abc_vertical.svg', 'w', encoding='utf-8') as f:
    f.write(svg)

示例 4:模式1 - 仅顺序

from svg_composer import compose_sequence

svg = compose_sequence("ABC", fill="black")
# 输出: SVG("ABC")

示例 5:模式2 - 全排列

from svg_composer import compose_permutations

svg_list = compose_permutations("ABC", fill="black")
# 输出: [SVG("ABC"), SVG("ACB"), SVG("BAC"), SVG("BCA"), SVG("CAB"), SVG("CBA")]

for i, svg in enumerate(svg_list):
    with open(f'perm_{i+1}.svg', 'w', encoding='utf-8') as f:
        f.write(svg)

示例 6:模式3 - 笛卡尔积

from svg_composer import compose_combinations

# 生成 3 位数字密码本 (0-9)
svg_list = compose_combinations("0123456789", length=3, fill="black")
# 输出: 1000 个 SVG (000, 001, 002, ... 999)

for i, svg in enumerate(svg_list):
    with open(f'code_{i:04d}.svg', 'w', encoding='utf-8') as f:
        f.write(svg)

示例 7:模式4 - 限制长度

from svg_composer import compose_limited

# 生成 1-2 位组合
svg_list = compose_limited("ABC", limit=2, fill="black")
# 输出: A, B, C, AB, AC, BA, BC, CA, CB (9个)

for i, svg in enumerate(svg_list):
    with open(f'combo_{i+1}.svg', 'w', encoding='utf-8') as f:
        f.write(svg)

示例 8:使用外部 SVG 文件

from svg_composer import compose_number

symbol_files = {
    'A': r"D:\symbols\A.svg",
    '1': r"D:\symbols\1.svg",
    '0': r"D:\symbols\0.svg",
}

svg = compose_number("A10", symbol_files, fill="black", margin=0)

with open('a10.svg', 'w', encoding='utf-8') as f:
    f.write(svg)

示例 9:使用 load_symbols + layout_elements

from svg_composer import load_symbols, layout_elements

# 加载外部符号文件夹
symbols = load_symbols(r"D:\PycharmProjects\icons")

# 横向拼接自定义符号
svg = layout_elements(
    elements=[symbols['A'], symbols['1'], symbols['0']],
    direction='horizontal',
    canvas_size=(640, 640),
    margin=10,
    fill='white'
)

with open('custom_icons.svg', 'w', encoding='utf-8') as f:
    f.write(svg)

示例 10:批量模式生成 + 预览 HTML

from svg_composer import batch_mode_compose_with_preview

svg_list, preview_path = batch_mode_compose_with_preview(
    output_dir="output",
    text="ABC",
    mode='permutations',  # 全排列
    fill='black',
    generate_preview=True  # 自动生成预览 HTML
)
print(f"预览页面: {preview_path}")

示例 11:生成预览 HTML(横向+纵向)

from svg_composer import compose_text, generate_preview_html

output_dir = "output"
text = "HELLO"

# 生成预览 HTML(包含横向和纵向两个 SVG)
html_path = generate_preview_html(
    output_dir=output_dir,
    text=text,
    direction='horizontal',
    fill='black',
    font_height_ratio=0.8
)

print(f"预览页面已生成: {html_path}")
# 预览页面包含:
# 1. 下载链接(可点击下载 SVG 文件)
# 2. 文件夹路径链接(file:/// 协议可直接打开)
# 3. SVG 预览图(棋盘格背景)

四种拼接模式对比

模式函数输入 "ABC" 示例数量
模式1compose_sequenceABC1
模式2compose_permutationsABC, ACB, BAC, BCA, CAB, CBA6
模式3compose_combinationsAAA, AAB, AAC... CCC (27个)27
模式4compose_limitedA, B, C, AB, AC, BA, BC, CA, CB9

字符集对比

字符集0-9A-Za-z来源
FA Free(默认)✅(自动转大写)@fortawesome/fontawesome-free

注意事项

  1. 字符集:使用 Font Awesome Free('fa'),支持 0-9A-Z
  2. 颜色:仅支持 black(#000000)和 white(#FFFFFF)
  3. 小写处理:小写字母自动转为大写
  4. 尺寸溢出:当总拼接长度超过画布时,自动整体等比缩放
  5. 组合数量:模式3(笛卡尔积)可能产生大量组合,注意性能

依赖

  • Python 3.7+
  • svgpathtools (pip install svgpathtools)

更新日志

  • v3.2
    • 新增 generate_preview_html() 函数:生成带超链接的预览 HTML
    • 新增 batch_mode_compose_with_preview() 函数:批量生成 + 自动生成预览
    • 预览页面包含:下载链接、文件夹路径链接(file:///)、SVG 预览图
  • v3.1
    • SVG 输出添加 Font Awesome 许可证注释(CC BY 4.0)
  • v3.0
    • 明确仅支持 0-9A-Z 字符集
    • 添加黑白双色支持(仅 black / white
    • 添加四种拼接模式:compose_sequencecompose_permutationscompose_combinationscompose_limited
    • 自动小写转大写处理
    • 移除 currentColor 支持
  • v2.0:默认字符集从 @tscircuit/alphabet 改为 @fortawesome/fontawesome-free
  • v1.0:初始版本,支持横向/纵向拼接

Related skills

Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.

by nssa.io1.0k installs47 stars

Post videos, photos, text, and documents to 10 social platforms through a single REST API call.

by victorcavero14375 installs50 stars

Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.

by johnpatternai21 installs8 stars

Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.

by Iván854 installs69 stars

Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.

by fly0pants4.3k installs296 stars

More from ldxs001

Browse all skills

Skill 标准化规范引擎。支持 R-01~R-26 规范审查(audit / create / update / refactor / bump / readonly 六模式),含权限扫描、数据目录合规检查、渐进式加载、LLM 二次筛分类。

by ldxs00165 installs

全平台统一发布工具。支持 skills 和 agents 的 Gitee/GitHub/ClawHub/SkillHub/PyPI 同步与 Release 创建,LLM 驱动的文件过滤与脱敏。

by ldxs00156 installs

Execute→Review→Advance 三步循环执行框架。增强步骤规划能力、增强语义理解;明确空转/重试/换思路/求助完整流转规则;最多重试3次、最多空转3次强制约束。

by ldxs00128 installs

调用链编排技能 — 既是调用链编辑器,也是粗粒度规划器。理解用户意图 → 规划 Skill 参与顺序 → 更新/保存/推荐调用链 → 拼接为调用链(支持循环/分支编排、子步骤拓扑排序、准确步骤计数)。

by ldxs00138 installs

draw.io 自动做图 Skill。当用户要求画图、生成图表、做架构图、流程图、UML、ER 图、时序图、思维导图等时触发。生成 .drawio 文件并用 draw.io 打开。支持思考-确认-迭代-版本回溯的完整工作流,8 个 Hook Point 安全校验。

by ldxs00111 installs

8种原子组件自由组合 + 3级约束, cell merging, two-level module system (base + composite), 7+ built-in templates, grid-aware visual editor, style presets, post-generation...

by ldxs00114 installs