jquery webcam + java服务拍照上传实例

前端关键代码:

//自定义样式
<style type="text/css">
    #webcam { border: 1px solid #666666; width: 320px; height: 240px; }
    #photos { border: 1px solid #666666; width: 320px; height: 240px; }
    .btn { width: 320px; height: auto; margin: 5px 0px; }
    .btn input[type=button] { width: 150px; height: 50px; line-height: 50px; margin: 3px; }
</style>

//展示内容
<div id="webcam"></div>
<div class="btn">
    <input type="button" value="删除" id="delBtn" onclick="delPhoto();"/>
    <input type="button" value="拍照" id="saveBtn" onclick="savePhoto();"/>
</div>
<div id="photos">
    <img src="" id="img">
</div>

//js
<script type="text/javascript" src="jquery.webcam.min.js"></script>
<script type="text/javascript">
    $(function () {
        var w = 320, h = 240;
        var pos = 0, ctx = null, saveCB, image = [];

        var canvas = document.createElement("canvas");
        canvas.setAttribute(‘width‘, w);
        canvas.setAttribute(‘height‘, h);

        console.log(canvas.toDataURL);
        if (canvas.toDataURL) {

            ctx = canvas.getContext("2d");

            image = ctx.getImageData(0, 0, w, h);

            saveCB = function(data) {

                var col = data.split(";");
                var img = image;

                for(var i = 0; i < w; i++) {
                    var tmp = parseInt(col[i]);
                    img.data[pos + 0] = (tmp >> 16) & 0xff;
                    img.data[pos + 1] = (tmp >> 8) & 0xff;
                    img.data[pos + 2] = tmp & 0xff;
                    img.data[pos + 3] = 0xff;
                    pos+= 4;
                }

                if (pos >= 4 * w * h) {
                    ctx.putImageData(img, 0, 0);
                    $.post("${ctx}/common/webcam/uploadPhoto", {type: "data", image: canvas.toDataURL("image/png")}, function(msg){
                        console.log(msg);
                        pos = 0;
                        $("#img").attr("src", "${ctx}/"+msg);
                    });
                }
            };

        } else {

            saveCB = function(data) {
                image.push(data);

                pos+= 4 * w;

                if (pos >= 4 * w * h) {
                    $.post("${ctx}/common/webcam/uploadPhoto", {type: "pixel", image: image.join(‘|‘)}, function(msg){
                        console.log(msg);
                        pos = 0;
                        $("#img").attr("src", "${ctx}/"+msg);
                    });
                }
            };
        }

        $("#webcam").webcam({
            width: w,
            height: h,
            mode: "callback",
            swffile: "${ctxStatic }/jquery-plugin/jscam_canvas_only.swf",

            onSave: saveCB,

            onCapture: function () {
                webcam.save();
            },

            debug: function (type, string) {
                console.log(type + ": " + string);
            }
        });
    });

    //拍照
    function savePhoto(){
        webcam.capture();
    }
</script>

java后端代码:

/**
 * 功能描述:拍照并上传图片
 *
 * @since 2016/5/24
 */
@RequestMapping(value = "/uploadPhoto")
public void uploadPhoto(HttpServletRequest req, HttpServletResponse resp) throws BusinessException {
    String basePath = "upload/" + DateUtils.getDate("yyyyMMdd") + "/";
    String filePath = req.getSession().getServletContext().getRealPath("/") + basePath;
    String fileName = DateUtils.getDate("yyyyMMddHHmmss") + ".png";
    //默认传入的参数带类型等参数:data:image/png;base64,
    String imgStr = req.getParameter("image");
    if (null != imgStr) {
        imgStr = imgStr.substring(imgStr.indexOf(",") + 1);
    }
    Boolean flag = GenerateImage(imgStr, filePath, fileName);
    String result = "";
    if (flag) {
        result = basePath + fileName;
    }
    this.writeJson(result, resp);
}

/**
 * 功能描述:base64字符串转换成图片
 *
 * @since 2016/5/24
 */
public boolean GenerateImage(String imgStr, String filePath, String fileName) {
    try {
        if (imgStr == null) {
            return false;
        }
        BASE64Decoder decoder = new BASE64Decoder();
        //Base64解码
        byte[] b = decoder.decodeBuffer(imgStr);
        //如果目录不存在,则创建
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        //生成图片
        OutputStream out = new FileOutputStream(filePath + fileName);
        out.write(b);
        out.flush();
        out.close();
        return true;
    } catch (Exception e) {
        logger.error("生成图片异常:{}", e.getMessage());
        return false;
    }
}

参考文章:

http://blog.csdn.net/hfhwfw/article/details/5544408

http://www.xarg.org/project/jquery-webcam-plugin/

时间: 2024-08-06 11:50:15

jquery webcam + java服务拍照上传实例的相关文章

java多附件上传 实例demo

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> &

PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例

PHP+jQuery.photoClip.js支持手势的图片裁剪上传实例,在手机上双指捏合为缩放,双指旋转可根据旋转方向每次旋转90度,在电脑上鼠标滚轮为缩放,双击则顺时针旋转90度. 下面让我们来看看核心代码: post的是base64,后端处理base64转存图片. 1 $("#clipArea").photoClip({ 2 width: 200, 3 height: 200, 4 file: "#file", 5 view: "#view"

java实现文件上传和下载

写在前面 [文件上传和下载]是很多系统必备功能, 比如PM\OA\ERP等:系统中常见的开发模式有B/S和C/S,而前者主要是通过浏览器来访问web服务器,一般采用七层协议中的[应用层http]进行数据传输,后者主要通过编程语言开发的app作为客户端来访问服务端,一般采用七层协议中的[传输层tcp]进行数据传输. 文章主要完成简单java web涉及的文件上传和下载功能. 正文 1. java原生servlet实现: pom.xml配置: <dependency> <groupId>

java多线程文件上传服务器

描述: (1)jdk自带线程池见 JDK自带线程池配置 (2)此上传文件服务器中上传文件的后缀名通过第一段缓冲字符流传递,此缓冲字符流大小为1024,在文件接收端以1024接收.处理. 1.服务器代码如下(使用jdk自带线程池): 1 /** 2 * 服务器处理多线程问题 3 * 4 * 1.因为服务器是要很多人访问的,因此里面一定要用多线程来处理,不然只能一个人一个人的访问,那还叫Y啥服务器 5 * 6 * 2,拿上面这个文件上传的例子来说,它将每个连接它的用户封装到线程里面去,把用户要执行的

PHP中,文件上传实例

PHP中,文件上传一般是通过move_uploaded_file()来实现的.  bool move_uploaded_file ( string filename, string destination ) 本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的).如果文件合法,则将 其移动为由 destination 指定的文件. 如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_fi

SpringMVC多文件上传实例

后台Conroller import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date;

php实现手机拍照上传头像功能

现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ['HTTP_RAW_POST_DATA'],这个系统函数跟post很相似,但是$GLOBALS ['HTTP_RAW_POST_DATA']支持的数据格式更丰富些,详细的区别请自己百度谷歌. 设计流程就是: $GLOBALS ['HTTP_RAW_POST_DATA']传递照片数据流(二进制)--

HTML5手机端拍照上传

1.accept="image/*" capture="camera" 自动调用手机端拍照功能 accept="image/*" capture="camera" 2.当表单提交时候有文件的时候,需要加上 var formData = new FormData($( "form" )[0]); 3.示例代码: <!DOCTYPE html> <html> <head> &

网站建设中使用HTML5实现使用手机摄像头拍照上传的功能

HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器.这是手机网站建设中常见的功能,当然你也可以在其它类型应用中适当使用此技术. 1. 视频流 html5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流.我们需要做的是添加一个Html5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源. <video id="