• Python: 截屏


    最近项目中想实现截屏功能,使用的笔记本是高清屏,实际屏幕设置成了150%,所以在截屏的时候遇到个各种问题。

    最开始使用PIL ImageGrab来截取屏幕,如果本来是100%的设置没有问题,能截取到全屏,但是150%或者其他设置的就会有问题,只能截取到屏幕的左上部分,无法截取到全屏。

    from PIL import ImageGrab
    
    pic = ImageGrab.grab()
    # print(pic.size)
    pic.save(r'C:Users	estDesktopAutomationpythonpic.jpg')

    但是这个问题很奇怪,也有的机器150%设置,但是执行后没有问题。

    遇到这个问题后看到网上有个解决方法:在注册表中ComputerHKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers添加python.exe和pythonw.exe路径信息进去,再次执行程序就能截取到全屏,用python代码添加注册表的话,要重新再次运行程序才能截取到全屏:

    from PIL import ImageGrab
    import winreg
    
    reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
    key = winreg.OpenKey(reg, r'Control PanelDesktopWindowMetrics')
    # print(winreg.QueryValueEx(key, 'AppliedDPI'))
    if winreg.QueryValueEx(key, 'AppliedDPI')[0] != 96:
        key.Close()
        key = winreg.OpenKey(reg, r'SOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers', 0, winreg.KEY_ALL_ACCESS)
    
        winreg.SetValueEx(key, r'C:Users	estAppDataLocalContinuumanaconda3pythonw.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')
        winreg.SetValueEx(key, r'C:Users	estAppDataLocalContinuumanaconda3python.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')
    key.Close()
    reg.Close()
    
    pic = ImageGrab.grab()
    # print(pic.size)
    pic.save(r'C:Users	estDesktopAutomationpythonpic.jpg')

    考虑到以后会用到其他机器上,每次都需要执行2次才能截取到全屏,就弃用了此方法。

    后来使用pyautogui来截取全屏,一般没有安装pyautogui,需要先安装:
    pip install pyautogui

    import pyautogui
    
    img = pyautogui.screenshot()
    img.save(r'C:Users	estDesktopAutomationpythonpic_pyautogui.jpg')

    但是如果笔记本还有连接外接显示器,是截取不到外显上内容的,只能截取笔记本显示器上的内容。如果要截取到外显上内容,想到使用win32方法来实现按键盘上的截屏功能,从而来实现抓取全屏带外显内容:

    import win32api
    import win32con
    from PIL import ImageGrab
    
    win32api.keybd_event(win32con.VK_SNAPSHOT, 0)
    im = ImageGrab.grabclipboard()
    im.save(r'C:Users	estDesktopAutomationpythonpic_screenshot.jpg')
  • 相关阅读:
    34、JS/AJAX
    33、mybatis(二)
    32、mybatis
    31、springmvc(注解)
    30、springmvc
    29、Oralce(五)
    Spring学习之路-SpringBoot简单入门
    Spring学习之路-从放弃到入门
    心情日记
    Spring学习之路-从入门到放弃
  • 原文地址:https://www.cnblogs.com/danvy/p/11721087.html
Copyright © 2020-2023  润新知