最近在项目中遇到这样一个需求,用户生成推广海报想要发送给朋友,但是推广海报是用html网页写的,这时候想要分享给朋友的话只能用户自己手机截图,显然这样的用户体验是不友好的,如果可以给用户一个按钮实现一键截图的功能,那么便极大地方便了用户,有可能就是因为省了这一步而使得推广的效果变得更好。下面就讲一下如何使用java实现屏幕截屏的功能。
第一步:创建截屏工具类
import java.awt.AWTException; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * 截屏工具类 * @author zhangdi * */ public class CutPicUtil { /** * 屏幕截图 * @param imageName 存储图片名称 * @param path 图片路径 * @param imgType 图片类型 * @throws AWTException * @throws IOException */ public static void cutPic(String imageName,String path,String imgType) throws AWTException, IOException{ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle screenRectangle = new Rectangle(screenSize); Robot robot = new Robot(); BufferedImage image = robot.createScreenCapture(screenRectangle); ImageIO.write(image,imgType, new File(path+imageName+"."+imgType)); } }
第二步:在服务层调用截图工具类
@Override public Map<String, Object> ScreenshotImg(String imageName, String basePath,String path, String imgType) { Map<String, Object> map = new HashMap<String, Object>(); boolean flag = true; String name = DateUtil.getNowDate(6)+RandomUtil.getRandomString(8); try { CutPicUtil.cutPic(name, basePath+path,imgType); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); flag = false; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); flag = false; } if(flag){ map.put("state","0");//截屏成功 map.put("path",path+name+"."+imgType); }else{ map.put("state","1");//截屏失败 } return map; }
第三步:在控制层提供接口
/** * 屏幕截图 * @return */ @RequestMapping(value="cutPic" ,method=RequestMethod.POST) @ResponseBody public Map<String, Object> cutPic(HttpServletRequest request){ String imageName = DateUtil.getNowDate(6)+RandomUtil.getRandomString(6); String basePath = request.getRealPath("/"); String path = "/static/img/Screenshotimg/"; return iManageService.ScreenshotImg(imageName,basePath,path, "jpg"); }
第四步:前台页面调用接口(这里使用原生js调用)
<img id="jietu" width="300px" height="180px"></br> <button id="jt">截屏</button> <script type="text/javascript"> $("#jt").click(function(){ $.ajax({ url:"router/cutPic", type:"post", data:{}, success:function(data){ if(data.state=="0"){ alert("截屏成功"); $("#jietu").attr("src","/wxactive"+data.path); }else{ alert("截图失败"); } window.clearInterval(timer); console.log(data); }, error:function(e){ alert("错误!!"); window.clearInterval(timer); } }); }); </script>
效果:点击截屏提示截屏成功并展示出来
注意:我这里是跟springMVC结合使用的,其实核心代码是截图工具类,大家可以选择性的使用。