截取当前屏

from PIL import Image
import time 
import os, win32gui, win32ui, win32con, win32api 

def window_capture(dpath): 
    hwnd = 0 
    hwndDC = win32gui.GetWindowDC(hwnd)  
    mfcDC=win32ui.CreateDCFromHandle(hwndDC)  
    saveDC=mfcDC.CreateCompatibleDC()  
    saveBitMap = win32ui.CreateBitmap()  
    MoniterDev=win32api.EnumDisplayMonitors(None,None) 
    w = MoniterDev[0][2][2] 
    h = MoniterDev[0][2][3] 
    print(w,h)   #图片大小
    saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)  
    saveDC.SelectObject(saveBitMap)  
    saveDC.BitBlt((0,0),(w, h) , mfcDC, (0,0), win32con.SRCCOPY) 
    cc=time.gmtime() 
    bmpname=str(cc[0])+str(cc[1])+str(cc[2])+str(cc[3]+8)+str(cc[4])+str(cc[5])+'.bmp' 
    saveBitMap.SaveBitmapFile(saveDC, bmpname) 
    Image.open(bmpname).save(bmpname[:-4]+".jpg") #截图的保存名字
    os.remove(bmpname) 
    jpgname=bmpname[:-4]+'.jpg' 
    djpgname=dpath+jpgname 
    copy_command = "move %s %s" % (jpgname, djpgname) 
    os.popen(copy_command) 
    return bmpname[:-4]+'.jpg' 

#调用截屏函数     
window_capture('')

 

### 使用Python实现在后台截取当前幕图像 对于希望在后台运行并能够捕获幕内容的应用场景,可以采用多种Python库来完成这一任务。这些库提供了不同的接口和特性,适用于不同需求下的开发工作。 #### PyAutoGUI 库用于快速简便的截图操作 `PyAutoGUI` 是一个易于使用的图形用户界面自动化模块,它不仅支持鼠标键盘事件模拟还提供了一个非常方便的方法来进行全或部分区域的截图[^2]。下面是一个简单的例子: ```python import pyautogui screenshot = pyautogui.screenshot() screenshot.save('screen_capture.png') ``` 这段代码会捕捉整个幕的内容,并将其保存为名为 `screen_capture.png` 的文件。 #### 利用Pillow(PIL)进行高效频繁的截图 当涉及到更高效的实时截图应用时,比如每秒钟需要抓取大量帧的情况,则可考虑使用基于PIL(即现在的Pillow)的方式。这里给出一段可以在一秒内尽可能多地获取幕快照的例子[^3]: ```python from PIL import ImageGrab import time def capture_screen(): start_time = time.time() count = 0 while time.time() - start_time < 1: screenshot = ImageGrab.grab() # 对于实际用途中的每一帧处理逻辑应该放在此处 count += 1 return count num_screenshots = capture_screen() print(f"在一秒钟内截取了 {num_screenshots} 张幕图像。") ``` 此脚本尝试在一个循环里持续调用 `ImageGrab.grab()` 方法直到经过了一秒时间为止,从而实现了高频次的幕捕捉能力。 #### PyQt5 结合WinAPI实现特定窗口截图 如果目的是针对某个具体应用程序窗口而不是整块幕的话,那么借助Qt框架所提供的工具集加上Windows API函数将会是非常有效的解决方案之一。通过这种方式可以获得指定窗口的确切位置尺寸信息进而精确控制要截取的画面范围: ```python import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtGui import QPixmap, QScreen import win32gui app = QApplication(sys.argv) window_title = "目标窗口名称" hwnd = win32gui.FindWindow(None, window_title) if hwnd != 0: widget = QWidget.createWindowContainer(QApplication.primaryScreen().grabWindow(hwnd)) else: print("未找到匹配的窗口") widget.showFullScreen() qPixmap = widget.grabFramebuffer() qPixmap.toImage().save("target_window_snapshot.jpg", 'JPEG') sys.exit(app.exec_()) ``` 上述代码片段展示了如何利用 `win32gui` 查找所需窗口句柄以及怎样运用 Qt 提供的功能创建相应容器对象最终达到只拍摄该窗口的效果。 综上所述,根据具体的项目背景和个人偏好可以选择最适合自己的方案去解决问题;无论是追求简易还是高性能亦或是特殊条件下的定制化需求都能得到满足。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值