如何将美观字体的字母转换为相对位置的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
相关产品推荐
相关产品推荐

