调用本地摄像头进行拍照

jsp界面代码


<div class="col-lg-4 col-md-4 col-sm-4 form-group " >
			 <input type="button" value="拍照" id="saveBtn" onclick="savePhoto()"/>  
</div>
//js代码
 //拍照
		function savePhoto() {
			layer.confirm('是否启动拍照功能', {
				icon : 3,
				title : '提示'
			}, function(index) {
				layer.close(index);
				$.post("/Exchange/servlet/DoctorServlet?type=photosave",
						function() {
						});
			}); 
		}

servlet中的方法

	protected void photosave(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException { 
		try {
            //调用拍照
			Demo demo=new Demo();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

Demo

	package com.gx.communication;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JPanel;

import org.bytedeco.javacpp.opencv_core.IplImage; 
import org.bytedeco.javacpp.opencv_core.Mat;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.OpenCVFrameGrabber;
import org.bytedeco.javacv.FrameGrabber.Exception;
 

public class Demo {
	public static void main(String[] args) throws Exception, IOException, InterruptedException {
	new Demo();
	}
 public Demo() throws Exception, InterruptedException{
//		Mat mat = new Mat();
//		int flipCode = 1;
//		flip(converter.convertToMat(要翻转的Frame), mat, flipCode);
//		//保存的时候依然需要将Mat转换
//		BufferedImage bufferedImage = java2dConverter.convert(convert.convert(mat));
//		
		OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
		grabber.setImageWidth(800);
		grabber.setImageHeight(640);
		grabber.start();


		OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
		IplImage grabbedImage = converter.convertToIplImage(grabber.grab());
		CanvasFrame frame = new CanvasFrame("Some Title", CanvasFrame.getDefaultGamma() / grabber.getGamma());
		// frame.setSize(800, 600);
		//frame.setBounds(200, 100, 640, 640);
		// 设置操作界面
		JPanel contentPane = new JPanel();
		//contentPane.setBounds(0, 0, 640, 640);
		Container contentPane2 = frame.getContentPane();


		JButton take_photo = new JButton("拍照");
		JButton save_photo = new JButton("保存");
		JButton cancle = new JButton("关闭");
		Camera camera = new Camera();
		// 监听拍摄
		take_photo.addMouseListener(new TakePhotoMouseAdapter(take_photo, camera));
		// 监听保存
		save_photo.addMouseListener(new SavePhotoMouseAdapter(grabbedImage));
		// 关闭
		cancle.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent arg0) {
			//	frame.setVisible(false);
			}
		});
		// 添加按钮
		contentPane.add(take_photo, BorderLayout.SOUTH);
		contentPane.add(save_photo, BorderLayout.SOUTH);
		contentPane.add(cancle, BorderLayout.SOUTH);
		// 添加面板
		contentPane2.add(contentPane, BorderLayout.SOUTH);
		// 操作状态
		while (frame.isVisible()) {

			// 获取图像
			if (camera.getState()) {
				grabbedImage = converter.convert(grabber.grab());
			}
			frame.showImage(converter.convert(grabbedImage));
			// 每40毫秒刷新视频,一秒25帧
			Thread.sleep(40);
		}
		frame.dispose();
		grabber.stop();
	 
 }
 

}

TakePhotoMouseAdapter

package com.gx.communication;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;

public class TakePhotoMouseAdapter  extends MouseAdapter{
	private JButton jButton;
	private Camera camera;
 
 
	public TakePhotoMouseAdapter(JButton jButton, Camera camera) {
		this.jButton = jButton;
		this.camera = camera;
	}
 
 
	@Override
	public void mouseClicked(MouseEvent arg0) {
		System.out.println("拍照");
		
		// 修改显示
		if (camera.getState()) {
			jButton.setText("继续拍照");
			// 暂停拍照
			camera.setState(false);
		} else {
			jButton.setText("拍照");
			// 继续拍照
			camera.setState(true);
		}
	}

}

SavePhotoMouseAdapter

package com.gx.communication;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import org.bytedeco.javacpp.opencv_core.IplImage;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.OpenCVFrameConverter.ToIplImage;

public class SavePhotoMouseAdapter extends MouseAdapter {
private IplImage iplImage;
	
	public SavePhotoMouseAdapter(IplImage iplImage) {
		this.iplImage = iplImage;
	}
 
 
	@Override
	public void mouseClicked(MouseEvent arg0) {
		
		Calendar ca = Calendar.getInstance(); 
		Date da=new Date();
		int strYEAR = ca.get(Calendar.YEAR);
		int strMONDAY = ca.get(Calendar.MONDAY) + 1;
		int strDATE = ca.get(Calendar.DATE); 
		//保存的名称
		String code = strYEAR + "" + strMONDAY + "" + strDATE+""+da.getTime()+".jpg";
	  
		String savePath = "D://potose"; //保存的目录
		File file = new File(savePath);
		// 判断上传文件的保存目录是否存在
		if (!file.exists() && !file.isDirectory()) {
			System.out.println(savePath + "目录不存在,需要创建");
			// 创建目录
			file.mkdir();
		}
		
		System.out.println("保存");
		// 保存结果提示框
		JFrame myFrame = new JFrame();
		try {
			if (iplImage != null) {
				// 保存图片
				cvSaveImage("D://potose//"+code.trim(), iplImage);
				// 发送修改用户头像请求...也可以直接发送字节数组到服务器,由服务器上传图片并修改用户头像
				JOptionPane.showMessageDialog(myFrame, "上传成功");
			}
		} catch (IOException e) {
			JOptionPane.showMessageDialog(myFrame, "保存失败");
			e.printStackTrace();
		} finally {
			// 关闭提示jframe
			myFrame.dispose();
			myFrame = null;
		}
	}
 
 
	public static void cvSaveImage(String path, IplImage image) throws IOException {
		File file = new File(path);
		// ImageIO.write(toBufferedImage(image), "jpg", file);
		// 使用字节保存
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ImageIO.write(toBufferedImage(image), "jpg", out);
		byte[] bs = out.toByteArray();
 
		// 保存字节数组为图片到本地
		FileOutputStream fos = new FileOutputStream(file);
		fos.write(bs, 0, bs.length);
		fos.close();
 
		out.close();
	}
 
 
	// 通过image获取bufferedImage
	//iplConverter 可以查看convert方法可以转换的对象,Frame IplImage,Mat之间转换   
	//Java2DFrameConverter让Frame和BufferedImage之间相互转换
	public static BufferedImage toBufferedImage(IplImage image) {
		ToIplImage iplConverter = new OpenCVFrameConverter.ToIplImage();
		Java2DFrameConverter java2dConverter = new Java2DFrameConverter();
		BufferedImage bufferedImage = java2dConverter.convert(iplConverter.convert(image));
		return bufferedImage;
	}

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值