实现区域截图功能

37 篇文章 1 订阅
8 篇文章 0 订阅

利用QQ或微信自带的截图功能实现区域截图。
在腾讯安装目录下找到PrScrn.dll,并将它放在需要的位置,
将D:/PrScrn.dll修改为你的目录。

如果在maya里面直接使用该代码

import os,subprocess
from PySide2.QtWidgets import QApplication
clipboard = QApplication.clipboard()
if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    startupinfo.wShowWindow = subprocess.SW_HIDE
else:
    startupinfo = None
grab = subprocess.Popen('rundll32.exe D:/PrScrn.dll PrScrn', startupinfo=startupinfo)
grab.wait() 
dataImage = clipboard.pixmap()
dataImage.save('D:\LenovoC\maya2017\Maya Icon\Grab.png')

这里写图片描述
如果在maya外部,使用此代码

    import os,subprocess,sys
    from PySide.QtGui import QApplication
    pp = QApplication(sys.argv)
     clipboard = QApplication.clipboard()
    if os.name == 'nt':
        startupinfo = subprocess.STARTUPINFO()
        startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
        startupinfo.wShowWindow = subprocess.SW_HIDE
    else:
        startupinfo = None
    grab = subprocess.Popen('rundll32.exe D:/PrScrn.dll PrScrn', startupinfo=startupinfo)
    grab.wait()
    dataImage = clipboard.pixmap()
    dataImage.save('D:/Grab1.jpg')

也可以用SnapShot.exe和CameraDll.dll,在腾讯软件安装目录下找到 SnapShot.exe和CameraDll.dll,并拷贝至同一目录,并将代码拷到一 起,运行即可截图。也可以直接运行exe文件进行截图。

import os,subprocess,sys
from PySide.QtGui import QApplication
pp = QApplication(sys.argv)
clipboard = QApplication.clipboard()

if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    startupinfo.wShowWindow = subprocess.SW_HIDE
else:
    startupinfo = None
grab = subprocess.Popen('SnapShot.exe CameraDll.dll CameraDll', startupinfo=startupinfo)
grab.wait()

dataImage = clipboard.pixmap()
dataImage.save('D:/Grab1.jpg')

这里写图片描述
下面写了一个用pyqt4写的截图工具,如果大家不想要使用腾讯的东西,可以研究一下。

import sys
try:
    from PyQt4 import QtGui,QtCore
except ImportError:
    raise ImportError("You need PyQt installed for using this tool.")
    sys.exit()

class Rubb(QtGui.QLabel):
    def __init__(self,name=None,parent=None):
        super(Rubb,self).__init__(parent)
        self.name = name
        self.createWidgets()
        # install event filter
        self.fullScreenLabel.installEventFilter(self)  
    def eventFilter(self,widget,event):       
        if widget != self.fullScreenLabel:
            return QtGui.QLabel.eventFilter(self, widget, event)          
        if event.type() == QtCore.QEvent.MouseButtonPress:
            if event.button() == QtCore.Qt.RightButton:
                #close full screen win
                self.fullScreenLabel.close()
            if event.button() == QtCore.Qt.LeftButton:
                self.leftMousePress = True
                self.origin = event.pos()
                if not self.rubberBand:
                    self.rubberBand = QtGui.QRubberBand(QtGui.QRubberBand.Rectangle,self.fullScreenLabel)
                self.rubberBand.setGeometry(QtCore.QRect(self.origin,QtCore.QSize()))
                self.rubberBand.show()
                return True
        if event.type() == QtCore.QEvent.MouseMove:

            if self.leftMousePress:
                if self.rubberBand:
                    self.rubberBand.setGeometry(QtCore.QRect(self.origin,event.pos()).normalized())
                return True
        if event.type() == QtCore.QEvent.MouseButtonRelease:
            self.leftMousePress = False
            if self.rubberBand:
                self.termination = event.pos()
                self.rect = QtCore.QRect(self.origin,self.termination)
                self.screenshot = self.fullScreenPixmap.copy(self.rect.x(),self.rect.y(),self.rect.width(),self.rect.height())
                # save
                print self.name
                self.screenshot.save(self.name+'.png', 'png')
                # close
                self.fullScreenLabel.close()
            return True                                
        return False

    def createWidgets(self):
        self.fullScreenLabel = QtGui.QLabel()
        self.fullScreenLabel.setCursor(QtCore.Qt.CrossCursor)

        self.fullScreenLabel.setAutoFillBackground(True)

        self.shotScreenLabel = QtGui.QLabel()
        self.rubberBand = QtGui.QRubberBand(QtGui.QRubberBand.Rectangle,self.fullScreenLabel)  
        pal = QtGui.QPalette()
        pal.setBrush(QtGui.QPalette.Highlight,QtGui.QBrush(QtCore.Qt.blue))   
        self.rubberBand.setPalette(pal)

        self.leftMousePress = False      

        self.fullScreenPixmap = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId())
        self.fullScreenLabel.setPixmap(self.fullScreenPixmap)

        self.fullScreenLabel.showFullScreen()


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main=Rubb(r'C:\Users\Administrator\Desktop\mayaApi\screen')
    main.fullScreenLabel.show()
    app.exec_()

最后,送上一个可以在图片上截图的小代码,今天就到这里了。

#-*- coding:utf-8 -*-

import cv2
import os,sys
global img
global point1, point2


reload(sys)
sys.setdefaultencoding("utf-8")

def on_mouse(event, x, y, flags, param):
    global img, point1, point2
    img2 = img.copy()
    if event == cv2.EVENT_LBUTTONDOWN:         
        point1 = (x,y)
        cv2.circle(img2, point1, 10, (0,255,0), 5)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON):               #按住左键拖曳
        cv2.rectangle(img2, point1, (x,y), (255,0,0), 5)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_LBUTTONUP:         

        point2 = (x,y)
        cv2.rectangle(img2, point1, point2, (0,0,255), 5) 
        cv2.imshow('image', img2)
        min_x = min(point1[0],point2[0])     
        min_y = min(point1[1],point2[1])
        width = abs(point1[0] - point2[0])
        height = abs(point1[1] -point2[1])
        cut_img = img[min_y:min_y+height, min_x:min_x+width]
        name='myTu_'
        path= os.path.abspath(os.path.join(os.getcwd()))
        #path=path.decode('utf-8')
        files =os.listdir(path)
        t=0
        for i in files:
            if "myTu"  in i:
                t=t+1
        cv2.imwrite(name+str(t)+".jpg", cut_img)

def main():
    global img
    img = cv2.imread('1.jpg')
    cv2.namedWindow('image')
    cv2.setMouseCallback('image', on_mouse)
    cv2.imshow('image', img)
    cv2.waitKey(0)

if __name__ == '__main__':
    main()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值