import time import win32gui, win32ui, win32con, win32api def window_capture(filename): hwnd = 0 # 窗口的编号,0号表示当前活跃窗口 # 根据窗口句柄获取窗口的设备上下文DC(Divice Context) hwndDC = win32gui.GetWindowDC(hwnd) # 根据窗口的DC获取mfcDC mfcDC = win32ui.CreateDCFromHandle(hwndDC) # mfcDC创建可兼容的DC saveDC = mfcDC.CreateCompatibleDC() # 创建bigmap准备保存图片 saveBitMap = win32ui.CreateBitmap() # 获取监控器信息 MoniterDev = win32api.EnumDisplayMonitors(None, None) w = MoniterDev[0][2][2] h = MoniterDev[0][2][3] # 为bitmap开辟空间 saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) # 高度saveDC,将截图保存到saveBitmap中 saveDC.SelectObject(saveBitMap) # 截取从左上角(0,0)长宽为(w,h)的图片 saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY) saveBitMap.SaveBitmapFile(saveDC, filename) if __name__ == '__main__': beg = time.time() for i in range(10): window_capture("test.jpg") end = time.time() print(end - beg)
截图10次的时间
0.3241748809814453
这种方式截图速度最快,图片较大
PIL
PIL截图
引用
pip install pillow
代码
import time from PIL import ImageGrab def screenshot(filename): img = ImageGrab.grab() img.save(filename,'JPEG') def screenshot2(filename): # 区域截图 img = ImageGrab.grab(bbox=(0, 0, 960, 540)) img.save(filename, 'JPEG') if __name__ == '__main__': beg = time.time() for i in range(10): screenshot("test.jpg") end = time.time() print(end - beg)
截图10次的时间
0.41718339920043945
这种方式截图会稍慢,但是截图是压缩后的,图片大小较小。
图片属性
# 1.图片加载与图片属性 from PIL import Image im = Image.open('./jinzhengen.png') # format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None; print(im.format) # 'PNG' # size属性是一个tuple,表示图像的宽和高(单位为像素) print(im.size) # (411, 273) # mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。 print(im.mode) # 'RGB' # 2.另存为 im.save('./123.jpg')
本地程序打开图片
from PIL import Image im = Image.open('test.jpg') im.show()
图片灰度
from PIL import Image im = Image.open('test.jpg') L = im.convert('L') L.show()
图片滤镜
# 4.图片的滤镜 from PIL import Image, ImageFilter im = Image.open('./test.png') # im.filter(ImageFilter.GaussianBlur) # 高斯模糊 =>画圈取平均值 # im.filter(ImageFilter.BLUR) # 普通模糊 # im.filter(ImageFilter.EDGE_ENHANCE) # 边缘增强 # im.filter(ImageFilter.FIND_EDGES) # 找到边缘 # im.filter(ImageFilter.EMBOSS) # 浮雕 # im.filter(ImageFilter.CONTOUR) # 轮廓 # im.filter(ImageFilter.SHARPEN) # 锐化 # im.filter(ImageFilter.SMOOTH) # 平滑 # im.filter(ImageFilter.DETAIL) # 细节 imf = im.filter(ImageFilter.GaussianBlur) imf.show()
图片裁剪及旋转
from PIL import Image, ImageFilter im = Image.open('./test.png') # (411, 273) box = (120, 194, 220, 294) #定义裁剪区域 => 左上角与右下角两个坐标 region = im.crop(box) #裁剪 display(region) # transpose 旋转指定角度 # 参数值 # Image.ROTATE_90、Image.ROTATE_180、Image.ROTATE_270 # Image.FLIP_LEFT_RIGHT(#左右对换), Image.FLIP_TOP_BOTTOM(上下对换) im.transpose(Image.FLIP_TOP_BOTTOM) # 图片旋转,旋转指定角度 # rotate 旋转随意角度 im.rotate(45) # 旋转随意角度
图像缩放
from PIL import Image, ImageFilter im = Image.open('./test.png') # (411, 273) im.resize((200,100)) # #参数表示图像的新尺寸,分别表示宽度和高度
图像对比度增强
# 8.图像对比度增强 from PIL import Image, ImageEnhance im = Image.open('./test.png') #亮度增强 # enh_bri = ImageEnhance.Brightness(im) # brightness = 1.5 # image_brightened = enh_bri.enhance(brightness) # image_brightened # #色度增强 # enh_col = ImageEnhance.Color(im) # color = 1.5 # 此值没有任何限制 # image_colored = enh_col.enhance(color) # image_colored # #对比度增强 enh_con = ImageEnhance.Contrast(im) contrast = 1.5 image_contrasted = enh_con.enhance(contrast) image_contrasted # #锐度增强 # enh_sha = ImageEnhance.Sharpness(im) # sharpness = 3.0 # image_sharped = enh_sha.enhance(sharpness) # image_sharped
GIF处理
# 9.gif图像处理 from PIL import Image im = Image.open('./test.gif') # (411, 273) display(im.format, im.size, im.mode) # 'GIF',(800, 600) 'P'=>帧 im.seek(1) # 定位到第几帧 im.tell() # 返回当前帧所处位置