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;
}
}