资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

截屏工具java代码 截图代码编写

用JAVA怎么做截屏工具?

哎~要是你给我个分就好了!我前几天刚刚做的!你拿去吧!

创新互联专注于企业全网整合营销推广、网站重做改版、秀屿网站定制设计、自适应品牌网站建设、H5建站商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为秀屿等各大城市提供网站开发制作服务。

/*

作者:泡沫

地址:

功能:用于截取图片,方便快捷!

mail:yuhuidog#163.com (注意:其中#为@)

*/

import java.awt.AWTException;

import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.Color;

import java.awt.Cursor;

import java.awt.Dimension;

import java.awt.FileDialog;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Panel;

import java.awt.Point;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class AWTpicture extends Frame implements MouseListener,MouseMotionListener,ActionListener{

private int firstX,firstY,frameWidth,frameHeight;

private int firstWith,firstHeight,firstPointx,firstPointy;

private BufferedImage bi,sbi,original;

private Robot robot;

private Rectangle rectangle;

private Rectangle rectangleCursor,rectangleCursorUp,rectangleCursorDown,rectangleCursorLeft,rectangleCursorRight;

private Rectangle rectangleCursorRU,rectangleCursorRD,rectangleCursorLU,rectangleCursorLD;

private Image bis;

private Dimension dimension;

private Button button,button2,clearButton;

private Point[] point=new Point[3];

private int width,height;

private int nPoints=5;

private Panel panel;

private boolean drawHasFinish=false,change=false;

private int changeFirstPointX,changeFirstPointY,changeWidth,changeHeight;

private boolean changeUP=false,changeDOWN=false,changeLEFT=false,changeRIGHT=false,changeRU=false,changeRD=false,changeLU=false,changeLD=false;

private boolean clearPicture=false,redraw=false;

private FileDialog fileDialog;

private AWTpicture(){

//取得屏幕大小

dimension=Toolkit.getDefaultToolkit().getScreenSize();

frameWidth=dimension.width;

frameHeight=dimension.height;

fileDialog=new FileDialog(this,"泡沫截图",FileDialog.SAVE);

rectangle=new Rectangle(frameWidth,frameHeight);

panel=new Panel();

button=new Button("退出");

button.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

button.setBackground(Color.green);

button2=new Button("截取");

button2.setBackground(Color.darkGray);

button2.addActionListener(new MyTakePicture(this));

button2.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

button.addActionListener(this);

clearButton=new Button("重绘");

clearButton.setBackground(Color.green);

clearButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

clearButton.addActionListener(new MyClearPicture(this));

panel.setLayout(new BorderLayout());

panel.add(clearButton, BorderLayout.SOUTH);

panel.add(button, BorderLayout.NORTH);

panel.add(button2, BorderLayout.CENTER);

try {

robot=new Robot();

} catch (AWTException e) {

e.printStackTrace();

}

//截取全屏

bi=robot.createScreenCapture(rectangle);

original=bi;

this.setSize(frameWidth,frameHeight);

this.setUndecorated(true);

this.addMouseListener(this);

this.addMouseMotionListener(this);

this.add(panel,BorderLayout.EAST);

this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

this.setVisible(true);

this.repaint();

}

public static void main(String[] args){

new AWTpicture();

}

public void paint(Graphics g) {

this.drawR(g);

}

//缓存图片

public void update(Graphics g){

if(bis==null){

bis=this.createImage(frameWidth, frameHeight);

}

Graphics ga=bis.getGraphics();

Color c=ga.getColor();

ga.setColor(Color.black);

ga.fillRect(0, 0, frameWidth, frameHeight);

ga.setColor(c);

paint(ga);

g.drawImage(bis, 0, 0, frameWidth, frameHeight, null);

}

public void mouseClicked(MouseEvent e) {

}

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

}

public void mouseReleased(MouseEvent e) {

if(!drawHasFinish){

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[1].x;

firstPointy=point[1].y;

}

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[2].x;

firstPointy=point[1].y;

}

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[1].x;

firstPointy=point[2].y;

}

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[2].x;

firstPointy=point[2].y;

}

changeFirstPointX=firstPointx;

changeFirstPointY=firstPointy;

if(point[1]!=null point[2]!=null ){

rectangleCursorUp=new Rectangle(firstPointx+20,firstPointy-10,width-40,20);

rectangleCursorDown=new Rectangle(firstPointx+20,firstPointy+height-10,width-40,20);

rectangleCursorLeft=new Rectangle(firstPointx-10,firstPointy+10,20,height-20);

rectangleCursorRight=new Rectangle(firstPointx+width-10,firstPointy+10,20,height-20);

rectangleCursorLU=new Rectangle(firstPointx-10,firstPointy-10,30,20);

rectangleCursorLD=new Rectangle(firstPointx-10,firstPointy+height-10,30,20);

rectangleCursorRU=new Rectangle(firstPointx+width-10,firstPointy-10,20,20);

rectangleCursorRD=new Rectangle(firstPointx+width-10,firstPointy+height-10,20,20);

drawHasFinish=true;

}

}

//确定每边能改变大小的矩形

if(drawHasFinish){

rectangleCursorUp=new Rectangle(changeFirstPointX+20,changeFirstPointY-10,changeWidth-40,20);

rectangleCursorDown=new Rectangle(changeFirstPointX+20,changeFirstPointY+changeHeight-10,changeWidth-40,20);

rectangleCursorLeft=new Rectangle(changeFirstPointX-10,changeFirstPointY+10,20,changeHeight-20);

rectangleCursorRight=new Rectangle(changeFirstPointX+changeWidth-10,changeFirstPointY+10,20,changeHeight-20);

rectangleCursorLU=new Rectangle(changeFirstPointX-2,changeFirstPointY-2,10,10);

rectangleCursorLD=new Rectangle(changeFirstPointX-2,changeFirstPointY+changeHeight-2,10,10);

rectangleCursorRU=new Rectangle(changeFirstPointX+changeWidth-2,changeFirstPointY-2,10,10);

rectangleCursorRD=new Rectangle(changeFirstPointX+changeWidth-2,changeFirstPointY+changeHeight-2,10,10);

}

}

public void mouseDragged(MouseEvent e) {

point[2]=e.getPoint();

//if(!drawHasFinish){

this.repaint();

// }

//托动鼠标移动大小

if(change){

if(changeUP){

changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;

changeFirstPointY=e.getPoint().y;

}

if(changeDOWN){

changeHeight=e.getPoint().y-changeFirstPointY;

}

if(changeLEFT){

changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;

changeFirstPointX=e.getPoint().x;

}

if(changeRIGHT){

changeWidth=e.getPoint().x-changeFirstPointX;

}

if(changeLU){

changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;

changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;

changeFirstPointX=e.getPoint().x;

changeFirstPointY=e.getPoint().y;

}

if(changeLD){

changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;

changeHeight=e.getPoint().y-changeFirstPointY;

changeFirstPointX=e.getPoint().x;

}

if(changeRU){

changeWidth=e.getPoint().x-changeFirstPointX;

changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;

changeFirstPointY=e.getPoint().y;

}

if(changeRD){

changeWidth=e.getPoint().x-changeFirstPointX;

changeHeight=e.getPoint().y-changeFirstPointY;

}

this.repaint();

}

}

public void mouseMoved(MouseEvent e) {

point[1]=e.getPoint();

//改变鼠标的形状

if(rectangleCursorUp!=null rectangleCursorUp.contains(point[1])){

this.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));

change=true;

changeUP=true;

}else if(rectangleCursorDown!=null rectangleCursorDown.contains(point[1])){

this.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));

change=true;

changeDOWN=true;

}else if(rectangleCursorLeft!=null rectangleCursorLeft.contains(point[1])){

this.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));

change=true;

changeLEFT=true;

}else if(rectangleCursorRight!=null rectangleCursorRight.contains(point[1]) ){

this.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));

change=true;

changeRIGHT=true;

}else if(rectangleCursorLU !=null rectangleCursorLU.contains(point[1])){

this.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));

change=true;

changeLU=true;

}else if(rectangleCursorLD !=null rectangleCursorLD.contains(point[1])){

this.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));

change=true;

changeLD=true;

}else if(rectangleCursorRU!=null rectangleCursorRU.contains(point[1])){

this.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));

change=true;

changeRU=true;

}else if(rectangleCursorRD!=null rectangleCursorRD.contains(point[1])){

this.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));

change=true;

changeRD=true;

}else{

this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

changeUP=false;changeDOWN=false;changeRIGHT=false;changeLEFT=false;changeRU=false;

changeRD=false;changeLU=false;changeLD=false;

}

redraw=false;

}

@Override

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

class MyTakePicture implements ActionListener{

AWTpicture aWTpicture;

MyTakePicture(AWTpicture aWTpicture){

this.aWTpicture=aWTpicture;

}

//保存图片

public void actionPerformed(ActionEvent e) {

fileDialog.setVisible(true);

if(changeWidth0){

sbi=bi.getSubimage(changeFirstPointX,changeFirstPointY,changeWidth,changeHeight);

File file=new File(fileDialog.getDirectory());

file.mkdir();

try {

ImageIO.write(sbi, "jpeg",new File(file,fileDialog.getFile()+".jpg") );

} catch (IOException e1) {

e1.printStackTrace();

}

}

}

}

class MyClearPicture implements ActionListener{

AWTpicture aWTpicture;

MyClearPicture(AWTpicture aWTpicture){

this.aWTpicture=aWTpicture;

}

public void actionPerformed(ActionEvent e) {

drawHasFinish=false;

change=false;

redraw=true;

rectangleCursorUp=null;

rectangleCursorDown=null;

rectangleCursorLeft=null;

rectangleCursorRight=null;

rectangleCursorRU=null;

rectangleCursorRD=null;

rectangleCursorLU=null;

rectangleCursorLD=null;

changeWidth=0;

changeHeight=0;

aWTpicture.repaint();

}

}

public void drawR(Graphics g){

g.drawImage(bi, 0,0,frameWidth,frameHeight, null);

if(point[1]!=null point[2]!=null !drawHasFinish !redraw){

int[] xPoints={point[1].x,point[2].x,point[2].x,point[1].x,point[1].x};

int[] yPoints={point[1].y,point[1].y,point[2].y,point[2].y,point[1].y};

width=(point[2].x-point[1].x)0?(point[2].x-point[1].x):(point[1].x-point[2].x);

height=(point[2].y-point[1].y)0?(point[2].y-point[1].y):(point[1].y-point[2].y);

changeWidth=width;

changeHeight=height;

Color c=g.getColor();

g.setColor(Color.red);

g.drawString(width+"*"+height, point[1].x, point[1].y-5);

//画点

/*int i;

if()*/

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[1].x;

firstPointy=point[1].y;

}

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[2].x;

firstPointy=point[1].y;

}

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[1].x;

firstPointy=point[2].y;

}

if(point[1].xpoint[2].x point[1].ypoint[2].y){

firstPointx=point[2].x;

firstPointy=point[2].y;

}

g.fillRect(firstPointx-2,firstPointy-2 , 5,5);

g.fillRect(firstPointx+(width)/2,firstPointy-2 , 5,5);

g.fillRect(firstPointx+width-2,firstPointy-2 , 5,5);

g.fillRect(firstPointx+width-2,firstPointy+ height/2-2, 5,5);

g.fillRect(firstPointx+width-2,firstPointy+height-2, 5,5);

g.fillRect(firstPointx+(width)/2,firstPointy+height-2, 5,5);

g.fillRect(firstPointx-2,firstPointy+height-2, 5,5);

g.fillRect(firstPointx-2,firstPointy+ height/2-2, 5,5);

//画矩形

//g.drawString("fafda", point[1].x-100, point[1].y-5);

g.drawPolyline(xPoints, yPoints, nPoints);

}

if(change){

g.setColor(Color.red);

g.drawString(changeWidth+"*"+changeHeight, changeFirstPointX, changeFirstPointY-5);

g.fillRect(changeFirstPointX-2,changeFirstPointY-2 , 5,5);

g.fillRect(changeFirstPointX+(changeWidth)/2,changeFirstPointY-2 , 5,5);

g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY-2 , 5,5);

g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY+ changeHeight/2-2, 5,5);

g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY+changeHeight-2, 5,5);

g.fillRect(changeFirstPointX+(changeWidth)/2,changeFirstPointY+changeHeight-2, 5,5);

g.fillRect(changeFirstPointX-2,changeFirstPointY+changeHeight-2, 5,5);

g.fillRect(changeFirstPointX-2,changeFirstPointY+ changeHeight/2-2, 5,5);

g.drawRect(changeFirstPointX, changeFirstPointY, changeWidth, changeHeight);

}

}

}

java 实现截屏!

主要是利用java的几个先有的函数,如Robot这个类的一个方法createScreenCapture一个获得一个任意大小的屏幕图像(在这里是全屏图像),而所谓的截图就是在这个图像上画出一个矩形,再利用上面的方法获得这部分的图像,程序中的cf.setAlwaysOnTop(true)是必需的;看起来是在屏幕上截图,其实只是在一个在一个内镶有桌面背景的JFrame中截图。不知道还有没有其他的好方法~

附上代码:

import java.awt.*;

import java.awt.image.*;

import java.awt.event.*;

import java.io.File;

import javax.imageio.ImageIO;

import javax.swing.*;

public class Camera {

/**

* @param args

*/

public static void main(String[] args) {

CameraJFrame cf=new CameraJFrame();

cf.setAlwaysOnTop(true);

cf.setUndecorated(true);

cf.setVisible(true);

}

}

class CameraJFrame extends JFrame

{

/**

*

*/

private static final long serialVersionUID = 1L;

Dimension di=Toolkit.getDefaultToolkit().getScreenSize();

public CameraJFrame()

{

setSize(di);

getContentPane().add(new CameraJPanel());

}

class CameraJPanel extends JPanel implements MouseListener,MouseMotionListener

{

/**

* flag主要是用来判别状态。

* 文件的格式名是unname+数字编号,格式是png

*/

private static final long serialVersionUID = 1L;

BufferedImage bi,get;

int startx,starty,endx,endy;

int flag=1;

String filename="unname";

String fileformat="png";

int count=1;

public CameraJPanel()

{

try

{

Robot ro=new Robot();

bi=ro.createScreenCapture(new Rectangle(0,0,di.width,di.height));

}

catch(Exception e)

{

e.printStackTrace();

}

addMouseListener(this);

addMouseMotionListener(this);

}

public void paintComponent(Graphics g)

{

g.drawImage(bi,0,0,di.width,di.height,this);

g.setColor(Color.red);

g.drawRect(startx, starty, endx-startx, endy-starty);

}

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

if(e.getButton()==MouseEvent.BUTTON3)

{

System.exit(0);

}

else if(e.getClickCount()==2)

{

try

{

Robot ro=new Robot();

get=ro.createScreenCapture(new Rectangle(startx,starty,endx-startx,endy-starty));

String name=filename+String.valueOf(count++)+"."+fileformat;

File f=new File(name);

ImageIO.write(get, fileformat, f);

}

catch(Exception ex)

{

ex.printStackTrace();

}

flag=1; //置flag为1,以便重新开始截图。

startx=starty=endx=endy=0;

repaint();

}

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

if(flag==1)

{

startx=e.getX();

starty=e.getY();

}

}

public void mouseReleased(MouseEvent e) {

flag=0;

}

public void mouseDragged(MouseEvent e) {

flag=1;

endx=e.getX();

endy=e.getY();

repaint();

}

public void mouseMoved(MouseEvent e) {}

}

}

java截屏有哪几种方法

前台方式

1. 利用html2canvas实现前台截屏

html2canvas项目的gitHub地址

html2canvas示例

html2canvas可以将HTML代码块进行截取,并生成快照形式的canvas,然后可以利用html5的下载功能提供图片的下载接口,供用户下载。

优点:前台技术,实现比较容易。

缺点:此项目使用了html5的技术,因此在对IE的兼容上,只可以在IE9+的版本上使用。

使用时,需要引用jQuery.js和html2canvas.js。(html2canvas.js可以在github上下载)

具体JavaScript代码如下:

var canvas = function () {

html2canvas($("#chart"), {

onrendered: function (canvas) {

$("#class11").html(canvas);//将id为“class11”部分的代码转换为canvas

var type = 'png';//图片类型为png

var imgData = canvas.toDataURL('png');//将图片转换为png类型的流

var _fixType = function (type) {

type = type.toLowerCase().replace(/jpg/i, 'jpeg'); var r = type.match(/png|jpeg|bmp|gif/)[0]; return 'image/' + r;

}; var saveFile = function (data, filename) {

var save_link = document.createElementNS('', 'a');

save_link.href = data;

save_link.download = filename; var event = document.createEvent('MouseEvents');

event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);

save_link.dispatchEvent(event);

}; //下载时的文件名

var filename = 'baidufe_' + (new Date()).getTime() + '.' + type; // 下载文件

saveFile(imgData, filename);

}

});

后台方式(java)

1. 利用html2image实现

html2image的地址(google)

html2image是可以识别html标签并将html转换成图片的java项目。

优点:后台转换,故对浏览器的版本基本没有要求。

缺点:对样式的识别不是很好,转换出来的图片比较简单,基本没有可以兼容的样式。

使用方式:maven中引用如下依赖:

dependency

groupIdcom.github.xuwei-k/groupId

artifactIdhtml2image/artifactId

version0.1.0/version/dependency12345

2. 利用DJNativeSwing项目实现

纯java代码实现。使用DJNativeSwing这个项目,构建一个swing浏览器,打开网址,之后截取图片。(需要eclipse的swt库支持)

优点:纯java实现。

缺点:需要多线程的支持,只在控制台方式实现过(由于本人对于多线程的掌握较弱,目前没有在spring项目中实现这个方法,求大神指导~~)

3. 利用phantomJs实现

phantomJs的GitHub地址

phantomJs官网

phantom利用的是webKit内核,全面支持web而不需浏览器支持,快速,原生支持各种Web标准。

优点:速度快,使用简单。

缺点:需要在项目的服务器端引用exe文件进行截图,并发性能有待考证。

Java如何实现截图功能

下面给你介绍将全屏幕截图保存到指定目录下的代码,希望能对你有帮助:

核心代码为:snapShot方法中的相关逻辑

package Jietu;

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 CameraTest {

private String filePreStr; // 默认前缀(选择存储路径例如: D:\\)

private String defName = "cameraImg"; // 默认截图名称

static int serialNum = 0; //截图名称后面的数字累加

private String imageFormat; // 图像文件的格式

private String defaultImageFormat = "png"; //截图后缀

Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //获取全屏幕的宽高尺寸等数据

public CameraTest() {

filePreStr = defName;

imageFormat = defaultImageFormat;

}

public CameraTest(String s, String format) {

filePreStr = 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 = filePreStr + 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);

}

}

// 运行之后,即可将全屏幕截图保存到指定的目录下面br // 配合前端页面上面的选择尺寸等逻辑,传到后台,即可实现自由选择截图区域和大小的截图br

public static void main(String[] args) {

CameraTest cam = new CameraTest("d:\\Hello", "png");//

cam.snapShot();

}

}


分享文章:截屏工具java代码 截图代码编写
本文来源:http://cdkjz.cn/article/ddojjdp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220