web前端页面全屏截图技术实现(插件【牛牛截图】)

web前端页面全屏截图技术实现(插件【牛牛截图】)

前段时间项目中需要用到截图,看了好多文章,最终得到实现像微信和QQ的截屏方式都得用一些插件(大佬除外),然后找了一个插件还挺好用,直接上代码吧需要的直接粘贴就行。

注意:请先运行插件,再进行操作
插件下载地址:http://www.ggniu.cn/download/CaptureInstall.exe
主要有三个js:https://download.csdn.net/download/jia814583973/15739899

1.前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script language="javascript" src="../js/jquery-1.6.4.min.js"></script>
    <script language="javascript" src="../js/niuniucapture.js"></script>
    <script language="javascript" src="../js/capturewrapper.js"></script>
    <script language="javascript" src="../js/jquery.json-2.3.min.js"></script>
    <style>
        #jp{
            width: 40px;
            height: 21px;
            background-color: #38B1B9;
        }
    </style>
</head>
<body>
<div id="jp" class="capture1">截屏</div>
</body>
<script>
   $(function () {
       Init();
   });
   $('.capture1').click(function () {
       showModalFram();
   });

   function showModalFram(){
       if(selfConnectionState()!= 2){
           if(confirm("您好!此功能需要截屏,需要安装截屏插件\n\n请点击确认下载并手动安装?")){
               selfConnection();//确定截屏插件安装完成,并连接成功
               return;
           }else{
               return;
           }
       }
       //自定义截图,传入截图后文件名
       var myDate = new Date();
       var year = myDate.getFullYear(),
           month = myDate.getMonth() + 1,
           dates = myDate.getDate(),
           hour = myDate.getHours() + '',
           min = myDate.getMinutes() + '',
           sec = myDate.getSeconds() + '';
       var mytime = "_"+year +
                       (month.length == 1 ? '0' + month : month)+
                       (dates.length == 1 ? '0' + dates : dates)+
                       (hour.length == 1 ? '0' + hour : hour) +
                       (min.length == 1 ? '0' + min : min) +
                       (sec.length == 1 ? '0' + sec : sec);
       console.log(mytime)
       StartUpdateCapture(mytime);
   }
   function selfConnection(){
       //获取当前牛牛截图连接状态
       captureObj.connectHost();
       if(selfConnectionState != 2){
           window.location="http://www.ggniu.cn/download/CaptureInstall.exe";
       }
   }
   function selfConnectionState(){
       console.log("connectionState:"+captureObj.connectState);
       return captureObj.connectState;
   }

   //自定义截图函数
   function StartUpdateCapture(fileName) {
       fileName = fileName+".jpg";
       var captureRet = captureUpdate(fileName);
       //从返回值来解析显示
       if(captureRet == emCaptureFailed || captureRet == emCaptureUnknown) {
        //window.location="http://www.ggniu.cn/download/CaptureInstall.exe";
       }
   }
   //把牛牛截图多个模式截图方式中选择全屏截图
   function captureUpdate(fileName){
       /**DoCapture参数说明:
        * 参数1:fileName 截图完成时自动保存的文件名
        * 参数2:是否要隐藏当前浏览器窗口(1表示截图时隐藏当前窗口,0表示截图时不隐藏当前窗口。)
        * 参数3:标识截图的方式(0:表示普通截图
                            1:表示截取指定区域,区域由x、y、width、height参数指定
                            2:表示截取当前桌面
                            3: 表示截图时先弹出一个提示窗口
                            4: 从剪贴板中获取图片)
        * 参数4/5/6/7:参数3autoCapture的值为1时表示自动截取指定区域。
                            当参数3autoCapture为3时:
                            a. 如果全0,则弹出预截图窗口后再选择区域
                            b. 如果全是1,则弹出预截图窗口后,自动截取整个桌面
                            c. 其他情况,弹出预截图窗口后,自动截取指定的区域
        **/
       return captureObj.DoCapture(fileName, 1, 3, 0, 0, 0, 0);
   }

   //控制上传
   function UploadCaptureData(content, localpath)
   {
       savedPictureContent = content;
        //获取图片的扩展名
       var pos = localpath.lastIndexOf('.');
       extendName = localpath.substr(pos + 1);
       var fileName = localpath.substr(localpath.lastIndexOf('\\')+1);
       UploadData(fileName);
       /*$('#show').html('截图已经完成,请点击');
       $('#show').show();
       var autoUpload = $("#autoupload").attr("checked")=="checked" ? 1 : 0;
       if(autoUpload)
       {
       UploadData();
       }
       else
       {
       $('#btnUpload').show();
       } */
   }

   //实际上传图像数据的函数,此处主要是将BASE64的图像数据,通过AJAX的方式POST到服务器保存成文件,并且显示在页面上
   function UploadData(fileName) {
       //上传的数据除了图片外,还可以包含自己需要传递的参数
       var dataPra = "fileName="+fileName+"&picdata=" + savedPictureContent;
       //获取路径中项目名称
       $.ajax({
           type: "POST",
           url: "/jp/uploadScreenshotPicture",
           dataType: "json",
           data: dataPra,
           success: function () {
               alert("上传成功");
           }
       });
   }
</script>
</html>

2.java代码

package com.jdl.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.misc.BASE64Decoder;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;

/**
 * @Descriptions 牛牛截屏
 * @Author:JDL
 * @Time:2021/3/11 15:11
 */
@Controller
@RequestMapping(value = "/jp")
public class JpController {

    @RequestMapping(value = "uploadScreenshotPicture",method = RequestMethod.POST)
    @ResponseBody
    public void uploadScreenshotPicture(HttpServletRequest request){
        try{
            String picdata = request.getParameter("picdata").replaceAll(" ", "+");
            String fileName = request.getParameter("fileName");
            //fileName = "截屏_"+ DateHelper.getNow();
            //项目在本地的路径
            String systemPath =request.getSession().getServletContext().getRealPath("");
            //File screenshotFile = new File(systemPath+"\\uploadPath\\screenshotPicture");
            File screenshotFile = new File("D:/upload1/jp");
            if(!screenshotFile.exists()){
                screenshotFile.mkdirs();
            }
            //systemPath = systemPath+"\\uploadPath\\screenshotPicture";
            systemPath = "D:/upload1/jp";
            boolean flag = JpController.generateImage(picdata,systemPath+"/"+fileName);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * base64字符串转化成图片
     * @param imgStr base64字符串
     * @param imagePath 转换图片地址
     * @return
     */
    public static boolean generateImage(String imgStr,String imagePath) {
        if (imgStr == null){//图像数据为空
            return false;
        }
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            byte[] decodeBuffer = decoder.decodeBuffer(imgStr);
            FileOutputStream fileOutputStream = new FileOutputStream(imagePath);
            fileOutputStream.write(decodeBuffer);
            fileOutputStream.flush();
            fileOutputStream.close();
            return true;
        }
        catch (Exception e) {
            return false;
        }
    }
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值