最近在項目中遇到這樣一個需求,用戶生成推廣海報想要發送給朋友,可是推廣海報是用html網頁寫的,這時候想要分享給朋友的話只能用戶本身手機截圖,顯然這樣的用戶體驗是不友好的,若是能夠給用戶一個按鈕實現一鍵截圖的功能,那麼便極大地方便了用戶,有可能就是由於省了這一步而使得推廣的效果變得更好。下面就講一下如何使用java實現屏幕截屏的功能。javascript
第一步:建立截屏工具類html
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)); } }
第二步:在服務層調用截圖工具類java
@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; }
第三步:在控制層提供接口ajax
/** * 屏幕截圖 * @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調用)spring
<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>
效果:點擊截屏提示截屏成功並展現出來app
注意:我這裏是跟springMVC結合使用的,其實核心代碼是截圖工具類,你們能夠選擇性的使用。dom