java 实现截图并且 保存在本地

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 实现截图并且 保存在本地相关的知识,希望对你有一定的参考价值。

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;

/**
* java截屏
* 运行后将当前屏幕截取,并最大化显示。
* 拖拽鼠标,选择自己需要的部分。
* 按Esc键保存图片到桌面,并退出程序。
* 点击右上角(没有可见的按钮),退出程序,不保存图片。
*
* @author JinCeon
*/
public class SnapshotTest
public static void main(String[] args)
// 全屏运行
RectD rd = new RectD();
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice();
gd.setFullScreenWindow(rd);



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);
int width = Math.abs(endx - orgx)+1;
int height = Math.abs(endy - orgy)+1;
// 加上1,防止width或height为0
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();


参考技术A 你好,很高兴为你解答。以下代码可以实现这个功能。

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;

/*******************************************************************************
* 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照" This JavaBean is used to snapshot the
* GUI in a Java application! You can embeded it in to your java application
* source code, and us it to snapshot the right GUI of the application
*
* @see javax.ImageIO
* @author liluqun ([email]liluqun@263.net[/email])
* @version 1.0
*
******************************************************************************/

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();

/***************************************************************************
* 默认的文件前缀为GuiCamera,文件格式为PNG格式 The default construct will use the default
* Image file surname "GuiCamera", and default image format "png"
**************************************************************************/
public GuiCamera()
fileName = defaultName;
imageFormat = defaultImageFormat;



/***************************************************************************
* @param s
* the surname of the snapshot file
* @param format
* the format of the image file, it can be "jpg" or "png"
* 本构造支持JPG和PNG文件的存储
**************************************************************************/
public GuiCamera(String s, String format)

fileName = s;
imageFormat = format;


/***************************************************************************
* 对屏幕进行拍照 snapShot the Gui once
**************************************************************************/
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;
File f = new File(name);
System.out.print("Save File " + name);
// 将screenshot对象写入图像文件
ImageIO.write(screenshot, imageFormat, f);
System.out.print("..Finished!\n");
catch (Exception ex)
System.out.println(ex);



public static void main(String[] args)
GuiCamera cam = new GuiCamera("d:\\qq", "bmp");//
cam.snapShot();

以上是关于java 实现截图并且 保存在本地的主要内容,如果未能解决你的问题,请参考以下文章

实现页面局部截图保存到本地

javascript 网页截图 保存为本地图片

js截图及绕过服务器图片保存至本地(html2canvas)

Java实现下载文件功能到本地电脑中,附源码和截图

Java实现下载文件功能到本地电脑中,附源码和截图

Unity之UI截图和利用Aspose.Words创建表格一起插入到Word中并保存到本地的一种解决方案