python 截图小工具

一、Windows 操作系统 Snipping Tool 截图工具
1:win+R打开运行。 
2:输入snippingtool

1:win+R打开运行。 
2:输入cmd
2:输入snippingtool

快捷键 Win + Shift + S 来打开 Snipping Tool 工具
二、用python实现屏幕截图功能
PIL实现截图
Python Imaging Library (PIL)它提供了许多用于图像处理的功能,包括图像打开、保存、转换、绘制等。
通过使用PIL库的ImageGrab方法实现坐标截屏。
安装PIL

pip install pillow

原理,代码示例:

from PIL import ImageGrab
# grab()如果不加参数,是全屏。四个参数分别是要截取范围的左上角x、y和右下角的x、y坐标。
im = ImageGrab.grab(bbox=(0, 0, 100, 100))
im.save(r'img.png')

三、python 截图小工具
源码如下:

import tkinter
import tkinter.filedialog
import os
from PIL import ImageGrab,Image
from time import sleep
import time

#用来显示全屏幕截图并响应二次截图的窗口类
class MyCapture:
	def __init__(self, png):
		#变量X和Y用来记录鼠标左键按下的位置
		self.X = tkinter.IntVar(value=0)
		self.Y = tkinter.IntVar(value=0)

		#屏幕尺寸
		screenWidth = root.winfo_screenwidth()
		screenHeight = root.winfo_screenheight()

		#创建顶级组件容器
		self.top = tkinter.Toplevel(root, width=screenWidth, height=screenHeight)

		#不显示最大化、最小化按钮
		self.top.overrideredirect(True)
		self.canvas = tkinter.Canvas(self.top,bg='white', width=screenWidth, height=screenHeight)

		#显示全屏截图,在全屏截图上进行区域截图
		self.image = tkinter.PhotoImage(file=png)
		self.canvas.create_image(screenWidth//2, screenHeight//2, image=self.image)

		#鼠标左键按下的位置
		def onLeftButtonDown(event):
			self.X.set(event.x)
			self.Y.set(event.y)

			#开始截图
			self.sel = True

		#鼠标左键移动,显示选取的区域
		def onLeftButtonMove(event):
			if not self.sel:
				return
			global lastDraw
			try:
				#删除刚画完的图形,要不然鼠标移动的时候是黑乎乎的一片矩形
				self.canvas.delete(lastDraw)
			except Exception as e:
				pass
			lastDraw = self.canvas.create_rectangle(self.X.get(), self.Y.get(), event.x, event.y, outline='red')

		#获取鼠标左键抬起的位置,保存区域截图
		def onLeftButtonUp(event):
			self.sel = False
			try:
				self.canvas.delete(lastDraw)
			except Exception as e:
				pass
			sleep(0.1)
			#考虑鼠标左键从右下方按下而从左上方抬起的截图
			left, right = sorted([self.X.get(), event.x])
			top, bottom = sorted([self.Y.get(), event.y])
			image = Image.open(png)
			pic = image.crop((left, top, right, bottom))
			#pic = ImageGrab.grab((left, top, right, bottom))
			txt1=time.strftime('%Y%m%d%H%M%S',time.gmtime())
			#弹出保存截图对话框
			fileName = tkinter.filedialog.asksaveasfilename(title='保存截图', filetypes=[("PNG file", "*.png"),("JPEG file", "*.jpeg;*.jpg"),("GIF file","*.gif"),("BMP file","*.bmp")],initialfile=txt1,defaultextension='.png')
			if fileName:
				pic.save(fileName)
				pic.close()
			#关闭当前窗口
			self.top.destroy()
		self.canvas.bind('<Button-1>', onLeftButtonDown)
		self.canvas.bind('<B1-Motion>', onLeftButtonMove)
		self.canvas.bind('<ButtonRelease-1>', onLeftButtonUp)
		#让canvas充满窗口,并随窗口自动适应大小
		self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)

#开始截图
def buttonCaptureClick():
	#最小化主窗口
	root.state('icon')
	sleep(0.2)
	filename = 'temp.png'
	#grab()方法默认对全屏幕进行截图
	im = ImageGrab.grab()
	im.save(filename)
	im.close()
	#显示全屏幕截图
	w = MyCapture(filename)
	buttonCapture.wait_window(w.top)
	#截图结束,恢复主窗口,并删除临时的全屏幕截图文件
	root.state('normal')
	os.remove(filename)
#窗口居中
def center_window(root,w, h):
	ws = root.winfo_screenwidth()
	hs = root.winfo_screenheight()
	x = (ws/2) - (w/2)   
	y = (hs/2) - (h/2)
	root.geometry('%dx%d+%d+%d' % (w, h, x, y))

root = tkinter.Tk()
#设置窗口大小与位置
#root.geometry('100x40+400+300')
center_window(root,95,40)
#设置窗口大小不可改变
root.resizable(False, False)
buttonCapture = tkinter.Button(root, text='截图', command=buttonCaptureClick)
buttonCapture.place(x=10, y=10, width=80, height=20)
#启动消息主循环
root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值