调用系统API
代码语言:javascript复制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截图
引用
代码语言:javascript复制pip install pillow
代码
代码语言:javascript复制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
这种方式截图会稍慢,但是截图是压缩后的,图片大小较小。
图片属性
代码语言:javascript复制# 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')
本地程序打开图片
代码语言:javascript复制from PIL import Image
im = Image.open('test.jpg')
im.show()
图片灰度
代码语言:javascript复制from PIL import Image
im = Image.open('test.jpg')
L = im.convert('L')
L.show()
图片滤镜
代码语言:javascript复制# 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()
图片裁剪及旋转
代码语言:javascript复制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) # 旋转随意角度
图像缩放
代码语言:javascript复制from PIL import Image, ImageFilter
im = Image.open('./test.png') # (411, 273)
im.resize((200,100)) # #参数表示图像的新尺寸,分别表示宽度和高度
图像对比度增强
代码语言:javascript复制# 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处理
代码语言:javascript复制# 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() # 返回当前帧所处位置