java实现截图并保存到本地(三种方法)

1.java实现截图并保存到本地
提供给大家三个方法,随意整理的

2.方法一:

    package com.credream.ocr;
     
    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 javax.imageio.ImageIO;
     
    public class GuiCamera {
        private String fileName;
        private String defaultName="GuiCamera";
        static int serialNum=0;
        private String imageFormat;//图像文件的格式
        private String defaultImageFormat="jpg";
        Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
        
        public  GuiCamera(){
            fileName=defaultName;
            imageFormat=defaultImageFormat;
        }
        
        public GuiCamera(String s,String format) {
            fileName=s;
            imageFormat=format;
        }
        /**
         * 对屏幕进行拍照
         *
         * **/
        public void snapshot(){
            try {
                //拷贝屏幕到一个BufferedImage对象screenshot
                BufferedImage screenshot=(new Robot()).createScreenCapture(
                        new Rectangle(0,0,(int)d.getWidth(),(int)d.getHeight()));
                serialNum++;
                //根据文件前缀变量和文件格式变量,自动生成文件名
                String name=fileName+String.valueOf(serialNum)+"."+imageFormat;
                System.out.println(name);
                File f=new File(name);
                System.out.println("Save File-"+name);
                //将screenshot对象写入图像文件
                ImageIO.write(screenshot, imageFormat, f);
                System.out.println("..Finished");
                
            } catch (Exception e) {
                System.out.println(e);
            }
        }
        public static void main(String[] args) {
            //"C:\\sally\\bootstrap栅格"是根据自己随意找的一个图片形式,"png"是图片的格式
            GuiCamera cam=new GuiCamera("C:\\sally\\bootstrap栅格","png");
            cam.snapshot();
        }
    }

----------------------------------------------------------------------------------------------------------------------------------------

3.方法二:

    package com.credream.ocr;
     
    import java.awt.AWTException;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.image.BufferedImage;
    import java.awt.image.RescaleOp;
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.filechooser.FileSystemView;
     
    class RectD extends JFrame{
        
        private static final long serialVersionUID = 1L;
        int orgx,orgy,endx,endy;
        Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
        BufferedImage image;
        BufferedImage tempImage;
        BufferedImage saveImage;
        Graphics g;
        
        @Override
        public void paint(Graphics g) {
                                      //缩放因子和偏移量
            RescaleOp ro=new RescaleOp(0.8f, 0, null);
            tempImage=ro.filter(image, null);
            g.drawImage(tempImage, 0, 0,this);
        }
        
        public RectD(){
            snapshot();
            setVisible(true);
            //setSize(d);//最大化窗口
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            
            this.addMouseListener(new MouseAdapter(){
                public void mousePressed(MouseEvent e){
                    orgx=e.getX();
                    orgy=e.getY();
                }
            });
            //鼠标运动监听器
            this.addMouseMotionListener(new MouseMotionAdapter() {
                //鼠标拖拽事件
                public void mouseDragged(MouseEvent e) {
                    endx=e.getX();
                    endy=e.getY();
                    g=getGraphics();
                    g.drawImage(tempImage, 0, 0, RectD.this);
                    int x=Math.min(orgx, endx);
                    int y=Math.min(orgy,endy);
                    //加上1,防止width,height为0
                    int width=Math.abs(endx-orgx)+1;
                    int height=Math.abs(endy-orgy)+1;
                    g.setColor(Color.BLUE);
                    g.drawRect(x-1, y-1, width+1, height+1);
                    //减1,加1都是为了防止图片将矩形框覆盖掉
                    saveImage=image.getSubimage(x, y, width, height);
                    g.drawImage(saveImage, x, y,RectD.this);
                }
            });
            
            this.addKeyListener(new KeyAdapter() {
                @Override
                //按键释放
                public void keyReleased(KeyEvent e){
                    //按Esc键退出
                    if(e.getKeyCode()==27){
                        saveToFile();
                        System.exit(0);
                    }
                }
            });
        }
        public void saveToFile(){
            SimpleDateFormat sdf=new SimpleDateFormat("yyyymmddHHmmss");
            String name=sdf.format(new Date());
            File path=FileSystemView.getFileSystemView().getHomeDirectory();
            String format="jpg";
            File f=new File(path+File.separator+name+"."+format);
            try {
                ImageIO.write(saveImage, format, f);
            } catch (IOException e) {
                e.printStackTrace();    
            }
        }
        
        public void snapshot(){
            
            try {
                Robot robot= new Robot();
                Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
                image=robot.createScreenCapture(new Rectangle(0,0,d.width,d.height));
                
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {
             //全屏运行
             RectD rd = new RectD();
             GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()
                     .getDefaultScreenDevice();
             gd.setFullScreenWindow(rd);
        }
    }

----------------------------------------------------------------------------------------------------------------------------------------

4.方法三:

    package com.credream.ocr;
    import java.awt.AWTException;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
     
    public class RobotExp {
        public static void main(String[] args) {
            try {
                Robot robot=new Robot();
                //根据指定的区域抓取屏幕的指定区域,1300是长度,800是宽度。
                BufferedImage bi=robot.createScreenCapture(new Rectangle(1300,800));
                //把抓取到的内容写到一个jpg文件中
                ImageIO.write(bi, "jpg", new File("C:\\sally\\bootstrap栅格1.png"));
                
            } catch (AWTException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

------------------------------------------------------------------------------------------------------------------------------------

三种方法,大致相同,只不过有的加了一些额外的方法。
---------------------

原文:https://blog.csdn.net/sanluo11/article/details/61923549
 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值