java實現屏幕截屏功能

  最近在項目中遇到這樣一個需求,用戶生成推廣海報想要發送給朋友,可是推廣海報是用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

相關文章
相關標籤/搜索