java實現屏幕截屏功能


  最近在項目中遇到這樣一個需求,用戶生成推廣海報想要發送給朋友,但是推廣海報是用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結合使用的,其實核心代碼是截圖工具類,大家可以選擇性的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM