前端页面免费全屏截图技术实现

Dear 丶 2022-05-28 00:10 315阅读 0赞






读者好!时隔将近1年我又来发布文章了,这篇文章主要是用于交接,顺带着赚一波积分,把自个的成果展示出来,给有这方面需求的开发者们提供一些参考资料。截图是使用免费第三方插件【牛牛截图】自带在线演示DEMO,,写出来是把自个踩过坑的解决方案公布出来。
图片描述在官方网站下载web文件,找出这个三个js文件引入到你自个页面中或者在我公布的链接中找到合适





  1. //获取路径中项目名称

  2. var ctx = ‘${ctx}’

  3. $(document).ready(function() {

  4. Init();

  5. });



复制代码

此函数用于初始化牛牛截图控件,需要在页面加载完成后立即调用。接下来是调用click截图事件了
图片描述
这个导出click事件就截图了,执行顺序是先截图再出模态框,模态框有其他需求,这里不做解释





  1. function showModalFram(){

  2. if(selfConnectionState()!= 2){

  3. if(confirm(“您好!此功能需要截屏,需要安装截屏插件\n\n请点击确认下载并手动安装?”)){

  4. selfConnection();//确定截屏插件安装完成,并连接成功

  5. return;

  6. }else{

  7. return;

  8. }

  9. }

  10. //自定义截图,传入截图后文件名

  11. StartUpdateCapture(“NoNIconPicture”);

  12. }



复制代码

showModalFram()这个函数里面的代码主要作用判断浏览器是否安装好牛牛截图插件。模态框的功能我删除掉了,不影响截图功能。其中的selfConnectionState()函数是我在官方提供js文件capturewrapper.js添加新的函数





  1. function selfConnection(){

  2. //获取当前牛牛截图连接状态

  3. captureObj.connectHost();

  4. if(selfConnectionState != 2){

  5. window.location=”http://www.ggniu.cn/download/CaptureInstall.exe“;

  6. }

  7. }

  8. function selfConnectionState(){

  9. console.log(“connectionState:”+captureObj.connectState);

  10. return captureObj.connectState;

  11. }



复制代码

当牛牛截图连接成功(这里有个缺陷不能一次安装成功后永久不用安装,每次重启笔记本使用这个功能都会提示下载截图插件提示,这个问题我想了很久都没有好的解决方案),走我自定义截图函数 StartUpdateCapture(fileName);





  1. //自定义截图函数

  2. function StartUpdateCapture(fileName)

  3. {

  4. fileName = fileName+”.jpg”;

  5. var captureRet = captureUpdate(fileName);

  6. //从返回值来解析显示

  7. if(captureRet == emCaptureFailed || captureRet == emCaptureUnknown) {

  8. //window.location=”http://www.ggniu.cn/download/CaptureInstall.exe“;

  9. }

  10. }

  11. //把牛牛截图多个模式截图方式中选择全屏截图

  12. function captureUpdate(fileName){

  13. return captureObj.DoCapture(fileName, 0, 1, 0, 200, 1900, 820);

  14. }



复制代码

captureUpdate(fileName)函数也是我自定义,从capture()函数中提供全屏截图的方法提取出来。
到此截图功能写完,那么截图会保存在C:\Users\XXX(计算机名)文件夹下,下面就是把截图好的图片上传到项目中
也是在官方提供js文件capturewrapper.js中找到UploadCaptureData(content, localpath)





  1. //控制上传

  2. function UploadCaptureData(content, localpath)

  3. {

  4. savedPictureContent = content;

  5. //获取图片的扩展名

  6. var pos = localpath.lastIndexOf(‘.’);

  7. extendName = localpath.substr(pos + 1);

  8. fileName = localpath.substr(localpath.lastIndexOf(‘\‘)+1);

  9. UploadData();

  10. /$(‘#show’).html(‘截图已经完成,请点击’);

  11. $(‘#show’).show();

  12. var autoUpload = $(“#autoupload”).attr(“checked”)==”checked” ? 1 : 0;

  13. if(autoUpload)

  14. {

  15. UploadData();

  16. }

  17. else

  18. {

  19. $(‘#btnUpload’).show();

  20. } /

  21. }



复制代码

这函数里面有我注释掉的,那是因为我不需要这些, UploadData()方法把截图的文件上传到你的项目





  1. /

  2. 实际上传图像数据的函数,此处主要是将BASE64的图像数据,通过AJAX的方式POST到服务器保存成文件,并且显示在页面上

  3. /

  4. function UploadData()

  5. {

  6. //上传的数据除了图片外,还可以包含自己需要传递的参数

  7. var data = “fileName=”+fileName+”&picdata=” + savedPictureContent;

  8. //获取路径中项目名称

  9. ctx = ctx.replace(‘a’,’f’);

  10. $.ajax({

  11. type: “POST”,

  12. url: ctx+”/station/uploadScreenshotPicture”,

  13. dataType: “json”,

  14. data: data,

  15. success: function () {}});

  16. }



复制代码

这个UploadData()中的ctx 变量是我获取们项目名称的方式,可以根据自己的获取项目名称方式来现实,不要照搬我的
最后是后端处理图片bsse64流了





  1. @RequestMapping(value = “uploadScreenshotPicture”,method = RequestMethod.POST)

  2. @ResponseBody

  3. public void uploadScreenshotPicture(HttpServletRequest request){

  4. try{

  5. String picdata = request.getParameter(“picdata”).replaceAll(“ “, “+”);

  6. String fileName = request.getParameter(“fileName”);

  7. //项目在本地的路径

  8. String systemPath =request.getSession().getServletContext().getRealPath(“”);

  9. File screenshotFile = new File(systemPath+”\uploadPath\screenshotPicture”);

  10. if(!screenshotFile.exists()){

  11. screenshotFile.mkdirs();

  12. }

  13. systemPath = systemPath+”\uploadPath\screenshotPicture”;

  14. aqMonitorStationService.generateImage(picdata,systemPath+”\“+fileName);

  15. }catch (Exception e){}


  16. }

  17. /*

  18. base64字符串转化成图片

  19. @param imgStr base64字符串

  20. @param imagePath 转换图片地址

  21. @return

  22. /

  23. public static boolean generateImage(String imgStr,String imagePath) {

  24. if (imgStr == null){//图像数据为空

  25. return false;

  26. }

  27. BASE64Decoder decoder = new BASE64Decoder();

  28. try {

  29. byte[] decodeBuffer = decoder.decodeBuffer(imgStr);

  30. FileOutputStream fileOutputStream = new FileOutputStream(imagePath);

  31. fileOutputStream.write(decodeBuffer);

  32. fileOutputStream.flush();

  33. fileOutputStream.close();

  34. return true;

  35. }

  36. catch (Exception e) {

  37. return false;

  38. }

  39. }



复制代码

到此截图功能写完,这是截取一张图片所走的流程,而我项目需求是自动截图我也把这个功能实现了

更多web资源:http://www.makeru.com.cn/    web学习交流群:362513833

发表评论

表情:
评论列表 (有 0 条评论,315人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Android 技术

    虽然Android系统提供了以组合键的方式来截图,但是有时我们并不需要这么麻烦,而是想尽可能的简单的实现。基于这样的需求,前些天在开发应用时,碰到了屏幕截屏技术,没接触前以为很