<microrock>

microrock

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  最近在项目中遇到这样一个需求,用户生成推广海报想要发送给朋友,但是推广海报是用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结合使用的,其实核心代码是截图工具类,大家可以选择性的使用。

posted on 2017-12-28 11:40  microrock  阅读(6695)  评论(0编辑  收藏  举报