前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python截屏及其它图片处理操作

Python截屏及其它图片处理操作

作者头像
码客说
发布2021-11-22 10:05:31
9490
发布2021-11-22 10:05:31
举报
文章被收录于专栏:码客

调用系统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()  # 返回当前帧所处位置
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 调用系统API
  • PIL
    • PIL截图
      • 图片属性
        • 本地程序打开图片
          • 图片灰度
            • 图片滤镜
              • 图片裁剪及旋转
                • 图像缩放
                  • 图像对比度增强
                    • GIF处理
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档