截图功能的实现

java截图

public class ScheenShot {
    public static void main(String[] args) throws Exception {
        String screenFilePath = System.getProperty("user.dir") + File.separator +"shot01.png";
        File file = new File(screenFilePath);

//        shot(file, "png", 100,100,200,200);
        shot(file, "png");
    }

    /**
     * 截取整个屏幕
     */
    public static void shot(File file, String suffix) throws Exception {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Rectangle screenRectangle = new Rectangle(screenSize);
        BufferedImage screenShotImage = new Robot().createScreenCapture(screenRectangle);

        if (!file.exists()){
            file.createNewFile();
        }
        ImageIO.write(screenShotImage, suffix, file);
    }

    /**
     *  截取某个区域
     */
    public static void shot(File file, String suffix, int x, int y, int width, int height) throws Exception {

        Rectangle screenRectangle = new Rectangle(x, y, width, height);
        BufferedImage screenShotImage = new Robot().createScreenCapture(screenRectangle);

        if (!file.exists()){
            file.createNewFile();
        }
        ImageIO.write(screenShotImage, suffix, file);
    }

js截图(不兼容ie)

function screenshotHandler(obj) {
    var shotButton = document.createElement('a');          // 创建一个a节点插入的document
    var event = new MouseEvent('click')           // 模拟鼠标click点击事件
    shotButton.download = Date.parse(new Date()) + ".jpg";                 // 设置a节点的download属性值
    if (obj['base64'] == "data:,"){
        bootstrapAlert("视频不存在")
    }else{
        shotButton.href = obj['base64'];                                 // 将图片的src赋值给a节点的href
        shotButton.dispatchEvent(event)                        // 触发鼠标点击事件
        SaveAs5(obj['base64']);
    }
}

但是后来还是要求兼容ie,改成window.open()请求

function screenshotHandler(obj) {
    if (obj['base64'] == "data:,"){
        bootstrapAlert("视频不存在")
    }else{
        openWindowWithPost("/api/flight/video", "_blank", "base64Img", obj['base64']);
    }
}

function openWindowWithPost(url,name,keys,values)
{
    var newWindow = window.open(url, name);
    if (!newWindow)
        return false;

    var html = "";
    html += "<html><head></head><body><form method='post' id='formid' action='" + url + "'>";
    if (keys && values)
    {
        html += "<input type='hidden' name='" + keys + "' value='" + values + "'/>";
    }

    html += "</form><script type='text/javascript'>document.getElementById('formid').submit();";
    html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, "");
    newWindow.document.write(html);

    return newWindow;
}

java里面的代码

    /**
     * 下载截图
     */
    @PostMapping("")
    public ResponseEntity<byte[]> saveImg(ScreenShot screenShot) throws IOException {
        byte[] bytes = service.toArray(screenShot);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", new Date().getTime() + ".jpeg");
        return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
    }

    /**
     * 在新窗口展示截图
     */
    @PostMapping("")
    public void test(@RequestBody ScreenShot screenShot, HttpServletResponse response) throws IOException {
        byte[] bytes = service.toArray(screenShot);
        ByteArrayInputStream in = new ByteArrayInputStream(bytes);
        response.setHeader("Content-Type", "image/jpeg");
        BufferedImage image = ImageIO.read(in);
        ImageIO.write(image, "jpg", response.getOutputStream());
    }
    //把base64位字符串改为byte数组
    public byte[] toArray(ScreenShot screenShot) throws IOException {
       String base64Img = screenShot.getBase64Img();
       base64Img = base64Img.substring(base64Img.indexOf(",") + 1);
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] b = decoder.decodeBuffer(base64Img);
        for (int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {
                b[i] += 256;
            }
        }
        return b;
    }

注意一下,由于base64位图片有前缀,一般图片base64开头都是data:image/png;base64,或者data:image/jpeg;base64,
要么22,要么23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值