Python 脚本中不同平台显示器分辨率的坐标转换
显示器坐标系统:
脚本示例:
>>> import pyautogui
>>> pyautogui.size() #获取屏幕分辨率
(1920, 1080)
>>> pyautogui.position() #获取当前鼠标坐标
(187, 567)
假设屏幕分辨率为1024x768,那么1920x1080分辨率下的(187, 567)坐标转换为:
X=187*1024/1920
Y=567*768/1080
总结为:
假设A分辨率下坐标是XA*YA, 那么XB*YB分辨率下的(xb,yb)坐标转换为:
xa=xb*XA/XB
ya=yb*YA/YB
基于以上换算,若:
python脚本中有若干个基于A分辨率下的坐标值(AX1,AY1),(AX2,AY2),(AX3,AY3)...,如何整体换算为B分辨率下的坐标值(BX1,BY1),(BX2,BY2),(BX3,BY3)...?
测试脚本(1920,1080):
import pyautogui
Pyautogui.click(1000,500) #原始脚本中的坐标值
Pyautogui.moveTo(100,50)
Pyautogui.doubleClick(800,600)
保存为coords.txt文本,放入f盘根目录,做为待处理文本。
坐标转换代码:
import re
X1,Y1 = 1920,1080 #修改为编写和调试原始脚本的显示器系统的分辨率的值
X2,Y2 = 1024,768 #后续移植到其他平台时的显示器系统的分辨率的值
f = open('f:\coords.txt').readlines()
s = "transfer coords:"
with open('f:\coords.txt','a') as h:
h.write('\n'*2+ s + '\n'*2)
for i in f:
a1 = i.find('(')
b1 = i.find(',')
c1 = i.find(')')
x1 = i[(a1+1):b1]
y1 = i[(b1+1):c1]
if bool(re.search(r'\d',i)): #筛选出包含数字的行
x = int(x1)*X2/X1
y = int(y1)*Y2/Y1
j = i.replace(x1,str(int(x)))
k = j.replace(y1,str(int(y)))
print (k)
with open('f:\coords.txt','a') as h: #追加写入文本
h.write(k)
转换完成的文本内容:
import pyautogui
Pyautogui.click(1000,500) #原始脚本中的坐标值
Pyautogui.moveTo(100,50)
Pyautogui.doubleClick(800,600)
transfer coords:
Pyautogui.click(533,355) #移植到其他平台时的坐标值
Pyautogui.moveTo(53,35)
Pyautogui.doubleClick(426,426)
至此,实现了不同平台显示分辨率的坐标值转换,可以在后续的编程中方便地使用。首次发文,简书的编辑还不太习惯,程序输入时注意行的格式。
---本文结束,欢迎拍砖---