运行时依赖
安装命令
点击复制技能文档
SVG 拼接工具(svg-composer)将 SVG 符号进行横向/纵向拼接,支持内置字符集和四种拼接模式。
技能概述 本技能封装了 SVG 布局拼接核心功能,支持两种使用方式: 内置字符集(零依赖):直接拼接 0-9、A-Z 等字符 自定义符号:从外部 SVG 文件加载符号进行拼接
适用场景: 图标/符号批量拼接(如数字、字母组合) 复合图标制作(多符号排列) Logo/徽章设计(多元素组合) 密码本/验证码生成(全排列组合)
内置字符集 Font Awesome Free(默认) 来源:@fortawesome/fontawesome-free v7.2.0 许可:CC BY 4.0 + SIL OFL 1.1 + MIT 支持字符:0-9、A-Z(共36个) 输入处理:小写字母自动转为大写 特性:viewBox 高度统一为 512,宽度各异(256/320/384/448/576) 每个字符有独立的 advance_ratio,间距计算精确 Y=0 在顶部(标准 SVG 坐标系)
许可证说明: 所有生成的 SVG 文件内部包含归属声明注释: 查看 SVG 源码即可看到完整许可证信息。
颜色支持 仅支持两种颜色: 颜色名 十六进制 说明 black #000000 黑色(默认) white #FFFFFF 白色 输入 fill 参数时接受: 颜色名称:"black" 或 "white" 十六进制:"#000000" 或 "#FFFFFF"
核心函数
- compose_text - 基础拼接(推荐)
- compose_sequence - 模式1:仅顺序
- compose_permutations - 模式2:全排列
- compose_combinations - 模式3:笛卡尔积
- compose_limited - 模式4:限制长度
- layout_elements - 布局拼接
- load_symbols - 加载自定义符号
- compose_number - 外部符号拼接(兼容)
使用示例 示例 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