Python 脚本中不同平台显示器分辨率的坐标转换

Python 脚本中不同平台显示器分辨率的坐标转换

显示器坐标系统:

Python 脚本中不同平台显示器分辨率的坐标转换_第1张图片
                                       

脚本示例:

>>> 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)


至此,实现了不同平台显示分辨率的坐标值转换,可以在后续的编程中方便地使用。首次发文,的编辑还不太习惯,程序输入时注意行的格式。

---本文结束,欢迎拍砖---

你可能感兴趣的:(Python 脚本中不同平台显示器分辨率的坐标转换)