You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将美观字体的字母转换为相对位置的X/Y坐标数组?

把字体路径转成pyautogui可用的相对坐标数组

步骤1:在Inkscape里处理文字路径

  • 输入目标签名文字,选择Firas字体,调整到较大尺寸(比如200px,减少坐标精度损失)
  • 选中文字,执行路径>对象转路径(Shift+Ctrl+C)
  • 重复执行路径>简化(Ctrl+L),直到节点数量精简到适合签名流畅度的程度
  • 打开编辑>XML编辑器,找到路径元素的d属性,复制里面的路径指令(格式类似M 100 200 L 105 193 L 95 193...)

步骤2:提取绝对坐标点

从复制的路径指令里提取所有(x,y)坐标对,用Python代码处理示例:

# 替换成你从SVG复制的路径指令
path_d = "M 86.45696533 51.07654447 L 91.45696533 44.07654447 L 81.45696533 44.07654447"
# 提取所有数字并转成浮点数
coords = list(map(float, path_d.replace('M','').replace('L','').split()))
# 整理成(x,y)元组列表
absolute_points = [(coords[i], coords[i+1]) for i in range(0, len(coords), 2)]

步骤3:转换为相对坐标数组

把绝对坐标转换成相对于前一个点的偏移量,同时取整适配pyautogui:

relative_coords = []
prev_x, prev_y = absolute_points[0]
for x, y in absolute_points[1:]:
    # 计算偏移:x正为右,y正为下(SVG和pyautogui的y轴均向下递增,向上则y为负)
    dx = round(x - prev_x)
    dy = round(y - prev_y)
    relative_coords.append([dx, dy])
    prev_x, prev_y = x, y

运行后得到的relative_coords就是你需要的格式,比如对应示例输出:

[
[5, -7],   # 5px right, 7px up
[-5, -7],  # 5px left, 7px up
]

步骤4:适配pyautogui签名脚本

把相对坐标数组整合到pyautogui里,示例代码:

import pyautogui
import time

# 替换成你的相对坐标数组
signature_coords = [
    [0, -28],  # 28px up
    [5, 7],    # 5px right,7px down
    [-5,7]     # 5px left,7px down
]

# 移动到签名起始位置(可手动定位后用pyautogui.position()获取坐标)
pyautogui.moveTo(300, 400)
time.sleep(0.5)

# 开始绘制签名
pyautogui.mouseDown()
for dx, dy in signature_coords:
    pyautogui.moveRel(dx, dy, duration=0.1)  # duration控制绘制流畅度
pyautogui.mouseUp()

如果绘制方向和预期相反,只需把dy取反(比如dy = round(prev_y - y))即可。

内容的提问来源于stack exchange,提问作者bluewater_sailor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:57:40