SSM框架 摄像头拍照将图片保存在本地或服务器中

通过在网上查找资料学习了一下,做出来一个通过摄像头拍照,再将照片保存在本地或者上传到服务其中的一个小demo,话不多说直接上代码

java依赖

		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.11</version>
		</dependency>

paizhao.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>拍照上传</title>
<style>
video {
	width: 300px;
	height: 400px;
	background-color: aquamarine;
	display: block;
}
#as{
width:50%;
margin:0 auto;}
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
</head>
<body>
	<div id="as">
		<form name="myform" action="fileuploadfice.do" method="post"
			enctype="multipart/form-data">
			<div style="float: left;">
				<video id="video"></video>
				<input type="button" title="拍照" value="拍照" onclick="getPhoto();" />
			</div>
			<div style="float: left;">
				<canvas id="canvas1" height="400px" name="photo"></canvas>
				<input type="hidden" id="pic" name="pic" value="" />
			</div>
		</form>
		<input type="button" onclick="shangchuan()" value="上传" />
	</div>
	<p>${kong}</p>
	<script>
		var video = document.getElementById('video');
		if (navigator.mediaDevices.getUserMedia) {
			//最新的标准API
			navigator.mediaDevices.getUserMedia({
				video : {
					width : 300,
					height : 400
				}
			}).then(success);
		} else if (navigator.webkitGetUserMedia) {
			//webkit核心浏览器
			navigator.webkitGetUserMedia({
				video : {
					width : 300,
					height : 400
				}
			}, success, error)
		} else if (navigator.mozGetUserMedia) {
			//firfox浏览器
			navigator.mozGetUserMedia({
				video : {
					width : 300,
					height : 400
				}
			}, success, error);
		} else if (navigator.getUserMedia) {
			//旧版API
			navigator.getUserMedia({
				video : {
					width : 300,
					height : 400
				}
			}, success, error);
		}
		function success(stream) {
			//将视频流设置为video元素的源
			console.log(stream);
			video.srcObject = stream;
			video.play();
		}
		function error(error) {
			console.log(`访问用户媒体设备失败${error.name}, ${error.message}`);
		}

		var video = document.querySelector('video');
		var audio, audioType;

		var canvas1 = document.getElementById('canvas1');
		var context1 = canvas1.getContext('2d');

		// 将视频帧绘制到Canvas对象上,Canvas每60ms切换帧,形成肉眼视频效果  
		function drawVideoAtCanvas(video, context) {
			window.setInterval(function() {
				context.drawImage(video, 0, 0, 90, 120);
			}, 60);
		}
		//拍照  
		function getPhoto() {
			context1.drawImage(video, 0, 0, 300, 400);//将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。  
			var imgData = canvas1.toDataURL();//获取图片的base64格式的数据
			console.log(imgData);
		}
		function shangchuan() {
			var imgData = canvas1.toDataURL();
			document.getElementById('pic').value = imgData;
			document.myform.submit();
		}
	</script>
</body>
</html>

FaceController.java

package com.test.faceRecognition.controller;

import java.util.UUID;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.test.faceRecognition.service.FaceService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.test.faceRecognition.util.GenerateImage;

@Controller
public class FaceController {
	@Resource
	private FaceService faceService;

	@RequestMapping("/paizhao")
	public String paizhao() {
		return "paizhao";
	}
	@RequestMapping("/fileuploadfice")
	public String processUpload(String pic, HttpServletRequest request, Model model) throws Exception {
		// 定义文件保存的本地路径
		//String path="E:\\upload\\";//绝对路径,需要保存在哪个文件夹文件夹下
		// 如果webapp下没有upload文件夹会自动创建
		String path = request.getServletContext().getRealPath("/upload/");
		// 生成uuid作为文件称
		String uuid = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
		boolean result=GenerateImage.generateImage(pic, path + uuid, request);
		if (result == false) {
			model.addAttribute("kong", "未上传成功");
		} else {
			model.addAttribute("kong", "上传成功");
		}
		return "paizhao";
	}
}

工具类
GenerateImage.java

package com.test.faceRecognition.util;

import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.codec.binary.Base64;

public class GenerateImage {
	public static boolean generateImage(String imgStr,String filePath,HttpServletRequest request) { 
		try {
			// Base64解码
			//截取字符转开头的data:image/png;base64
			imgStr = imgStr.replaceFirst("data:image/png;base64,", "");
			byte[] b = Base64.decodeBase64(imgStr);
			for (int i = 0; i < b.length; ++i) {
				if (b[i] < 0) {// 异常数据调整
					b[i] += 256;
				}
			}
			// 生成jpg图片,保存到本地或服务器
			OutputStream out = new FileOutputStream(filePath);
			out.write(b);
			out.flush();
			out.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
}

作为人生第一次发博客,还是有点小激动的,请大佬们多多关照,提提意见,不喜勿喷,谢谢!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
      掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。重要通知:本课程根据腾讯AI车牌识别新接口,更新了新接口源代码,发布程序,购买了课程的同学可以下载新程序,包括(运行程序及源代码),更新时间:2021-2-17项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具相关课程学习顺序本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:    1、计算机基础    2、HTML语言基础    3、C语言从入门到精通+贪吃蛇游戏    4、贪吃蛇游戏    5、SQL SERVER数据库基础    6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件    7、推箱子游戏;    8、仿QQ即时通讯软件;JAVA级工程师:    9、SQLSERVER数据库高级    10、SQLSERVER从入门到精通(基础+高级)              11、JavaScript从入门到精通,    12、JSP从入门到精通+点餐系统,    13、JSP从入门到精通+在线视频学习教育平台,    14、JSP从入门到精通+大型电商平台;    15、XML从入门到精通,    16、数据结构(JAVA版),JAVA高级工程师:    17、Oracle数据库从入门到精通,    18、ajax+jquery从入门到精通,    19、EasyUI从入门到精通,SSH框架:    20、Struts2从入门到精通课程,    21、Hibernate从入门到精通课程,    22、Spring从入门到精通课程;    23、Echarts从入门到精通,    24、Excel基于POI的导入导出工作流框架:    25、Activiti流程框架从入门到精通    26、JBPM流程框架从入门到精通SSM框架:    27、MyBatis从入门到精通    28、Spring MVC从入门到精通面试题:    29、职业生涯规划及面试题集锦商业项目:    30、微信公众号在线支付系统    31、微信生活缴费在线支付系统    32、支付宝生活缴费在线支付系统    33、在线考试系统    34、手机订餐管理系统,    35、CRM客户关系管理系统    36、大型房地产CRM销售管理系统    37、CMPP2,CMPP3移动网关系统人工智能:    38、人脸识别在线考试系统    39、人脸识别系统项目实战    40、车牌识别系统项目实战    41、身份证识别系统项目实战    42、营业执照识别系统项目实战          43、名片识别管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值