java实现 模仿QQ截图功能

      因项目需求,写了个模仿QQ截图的功能,没有QQ弄的那么好,截图主要是存放在服务器的,并没有 

在前台展示,需要展示的时候,再从服务器取就可以了。待完善。


1.页面的调用

//进行截图, 并将图片存放在制定路径(是手工截取的,跟系统需求不符合)
function  screenCapture(){
	    var params="method=screenCapture";
		var url = "<%=basePath%>/NameCheck.do";
	    $.post(url,params,function(megs){
	    		$("#screen").val(megs);
	    });
}


2. 后台代码Action

package com.contactlist.action;

import java.awt.GraphicsEnvironment;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.upload.FormFile;
import com.destination.action.ScreenCapture;
import com.weibo.weibo4j.util.URLEncodeUtils;

public class NameCheckAction extends DispatchAction
{
    /**
     * 截图并将图片存在指定文件里面
     * 
     * @author Beau Virgill
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @throws Exception
     */

    public ActionForward screenCapture(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        System.out.println("--------------------------------手工截取google地图----------------------------------in");
        GraphicsEnvironment ge =  GraphicsEnvironment.getLocalGraphicsEnvironment();   
        System.out.println("ge.isHeadless() = " + ge.isHeadless());   
        if (ge.isHeadless()) {   
           System.setProperty("java.awt.headless", "false");   
        }
        String filepath = NameCheckAction.class.getResource("/").getPath();
        String savepath2 = "";
        String osName = System.getProperty("os.name");
        log.info("osName==========" + osName);
        if (osName.charAt(0) == 'W')
        {
            savepath2 = filepath.substring(1, filepath.length() - 16) + "photoUpload/" + "screenCapture.jpg";
        }
        else
        {
            savepath2 = filepath.substring(0, filepath.length() - 16) + "photoUpload" + File.separator
                    + "screenCapture.jpg";
        }
        File tempFile = new File(URLEncodeUtils.decodeURL(savepath2));

        ScreenCapture capture = ScreenCapture.getInstance();
        capture.captureImage();
        System.out.println(URLEncodeUtils.decodeURL(savepath2));
        try
        {
            capture.saveToFile(tempFile);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        PrintWriter out = response.getWriter();
        out.print(URLEncodeUtils.decodeURL(savepath2));

        return null;
    }

    /**
     * ajax返回JSON 组装数据
     * 
     * @author      Beau Virgill 注:(此方法有误,慎用。)
     * @param msg
     * @param response
     * @throws Exception
     */

    public void ajaxReturn(HttpServletResponse response, String msg)
    {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json");
        PrintWriter out = null;
        try
        {
            out = response.getWriter();
            StringBuffer rebuf = new StringBuffer("{msg:\'" + msg + "\'"); // 使用STRINGBUFFER组装相关数据
            rebuf.append("}");
            out.println(rebuf.toString());
            System.out.println(rebuf.toString());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            out.flush();
            out.close();
        }
    }

    private int saveFile(FormFile file, String fileSavePath)
    {

        FileOutputStream fileOutput;
        try
        {
            fileOutput = new FileOutputStream(fileSavePath);
            fileOutput.write(file.getFileData());
            fileOutput.flush();
            fileOutput.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
            log.error("配置的上传路径不存在!");
            return 81;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            log.error("请确认当前用户对配置的上传路径目录是否有写权限!");
            return 82;
        }
        return 10;
    }

}


3.  Action调用的封装的截图方法

package com.destination.action;

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JPanel;

public class ScreenCapture
{
    private static ScreenCapture dafaultCapture=new ScreenCapture();
    private int x1,y1,x2,y2;
    private int recX,recY,recH,recW;
    private boolean isFirstPoint=true;
    private BackgroudImage labFullScreenImage=new BackgroudImage();
    private Robot robot;
    private BufferedImage fullScreenImage;
    private BufferedImage pickedImage;
    private String defaultImageFormater="jpg";
    private JDialog dialog=new JDialog();
    private ScreenCapture(){
      
        try{
            robot=new Robot();
        }catch (AWTException e) {
          System.err.println("Internal Error:"+e);
          e.printStackTrace();
        }
        JPanel cp=(JPanel) dialog.getContentPane();
        cp.setLayout(new BorderLayout());
        labFullScreenImage.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent evn){
                isFirstPoint=true;
                pickedImage=fullScreenImage.getSubimage(recX, recY, recW, recH);
                dialog.setVisible(false);
            }
        });
        labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter(){
            public void mouseDragged(MouseEvent evn){
                if(isFirstPoint){
                    x1=evn.getX();
                    y1=evn.getY();
                    isFirstPoint=false;
                }else{
                    x2=evn.getX();
                    y2=evn.getY();
                    int maxX=Math.max(x1, x2);
                    int maxY=Math.max(y1, y2);
                    int minX=Math. min(x1, x2);
                    int minY=Math. min(y1, y2);
                    recX=minX;
                    recY=minY;
                    recW=maxX-minX;
                    recH=maxY-minY;
                  labFullScreenImage.drowRectangle(recX, recY, recW, recH);
                }
            }
            public void mouseMoved(MouseEvent e){
                labFullScreenImage.drowCross(e.getX(), e.getY());
            }
        });
        cp.add(BorderLayout.CENTER,labFullScreenImage);
        dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
        dialog.setAlwaysOnTop(true);
        dialog.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
        dialog.setUndecorated(true);
        dialog.setSize(dialog.getMaximumSize());
        dialog.setModal(true);
    }
    
    public static ScreenCapture getInstance(){
        return dafaultCapture;
    }
    
    public  Icon captureFullScreen(){
        fullScreenImage=robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
        ImageIcon icon=new ImageIcon(fullScreenImage);
        return icon;
    }
    
    public void captureImage(){
        dialog.setVisible(false);
        fullScreenImage=robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
        ImageIcon icon=new ImageIcon(fullScreenImage);
        labFullScreenImage.setIcon(icon);
        dialog.setVisible(true);
    }
    
    public BufferedImage getPickedImage(){
        return pickedImage;
    }
    
    public ImageIcon getPickedIcon(){
        return new ImageIcon(getPickedImage());
    }
    
    public void saveToFile(File file) throws IOException{
        ImageIO.write(getPickedImage(), defaultImageFormater, file);
    }
    
    public void saveAsPNG(File file) throws IOException{
        ImageIO.write(getPickedImage(), "png", file);
    }
    
    public void saveAsJPEG(File file) throws IOException{
        ImageIO.write(getPickedImage(), "JPEG", file);
    }
    
    public void write(OutputStream out)throws IOException{
        ImageIO.write(getPickedImage(),defaultImageFormater, out);
    }
    

}


4.  封装的背景图片方法

package com.destination.action;

import java.awt.Graphics;

import javax.swing.JLabel;

public class BackgroudImage extends JLabel{
        int lineX,lineY;
        int x,y,h,w;
        
        public void drowCross(int x,int y){
            lineX=x;
            lineY=y;
            repaint();
        }
        
        public void drowRectangle(int x,int y,int w,int h){
            this.x=x;
            this.y=y;
            this.h=h;
            this.w=w;
            repaint();
        }
        
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            g.drawRect(x, y, w, h);
            String area=Integer.toString(w)+"*"+Integer.toString(h);
            g.drawString(area, x+(int)w/2-15, y+(int)h/2);
            g.drawLine(lineX, 0, lineX, getHeight());
            g.drawLine(0, lineY, getWidth(), lineY);
            
        }

}









转载于:https://my.oschina.net/u/1172409/blog/164484

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值