js开启摄像头(头像采集)



js开启摄像头,拍摄图片,传递到后台,保存到本地


html代码

<video id="video" width="400" height="300"></video>
 <button id='tack'> snap shot</button>
 <canvas id='canvas' width='400' height='300'></canvas>
 <img id='img' src=''>

js代码

<script>
     var video = document.getElementById('video'),
             canvas = document.getElementById('canvas'),
             snap = document.getElementById('tack'),
             img = document.getElementById('img'),
                 vendorUrl = window.URL || window.webkitURL; //媒体对象
//mediaDevices 是 Navigator 只读属性,返回一个 MediaDevices 对象,
    该对象可提供对相机和麦克风等媒体输入设备的连接访问,也包括屏幕共享。
          //    var mediaDevices = navigator.mediaDevices;
//MediaDevices 是一个单例对象。通常,您只需直接使用此对象的成员
        // navigator.mediaDevices.getUserMedia() ;  
 //Navigator 对象的实例是唯一的,可以用 Window 对象的 navigator 属性来引用它。
  
   if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {    //如果可以得到     

            //MediaDevices.getUserMedia()会提示用户给予使用媒体输入的许可,
                    媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。
                    此流可以包含一个视频轨道(来自硬件或者虚拟视频源,比如相机、视频采集设备和
                        屏幕共享服务等等)、一个音频轨道(同样来自硬件或虚拟音频源,比如麦克风、
                            A/D转换器等等),也可能是其它轨道类型。 详细介绍看API

                          navigator.mediaDevices.getUserMedia({
                                       video: { width: 500, height: 500 },
                                         audio: false
                             }).then(function(stream) {
                                             video.srcObject = stream;    //将生成的媒体流给video作为视频流播放
                                             video.play();     //播放视频
                                         }).catch(function(err) {
                                                     console.log(err);
                                             });
       } else {
             this.$Message.error('没有检测到摄像头,请确认链接!!!');
         }

//响应点击时间 保存视频区域成图片

         snap.addEventListener('click', function(){
                           //绘制canvas图形canvas的详细手册
                     canvas.getContext('2d').drawImage(video, 0, 0, 400, 300);
                        //把canvas图像转为img图片

                         / /canvas.toDataURL(type, encoderOptions);
                             //type 可选    图片格式,默认为 image/png
                                //encoderOptions 可选    在指定图片格式为 image/jpeg 或 image/webp的情况下,
                                //可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。
                                //其他参数会被忽略。 返回值 包含 data URI 的DOMString。  
                     img.src = canvas.toDataURL("image/png");
                 }
           )
     </script>

java代码

    //canvasUrl      canvas生成的base64编码的图片信息,也就是上面说的canvas.toDataURL("image/png");
    //filePth     上传文件的路径 
private String addCanvasPic(String canvasUrl,String filePth)throws Exception {
                 String imageDateB64 = canvasUrl.substring(22); //处理canvasUrl,去掉头信息data:image/png;base64
               BASE64Decoder decoder = new BASE64Decoder(); //此类是sun公司的内部类,无法直接使用,百度解决
                byte[] b = decoder.decodeBuffer(imageDateB64);//解码转成字节数组
                 ByteArrayInputStream bais = new ByteArrayInputStream(b); //字节数组输入流
                 BufferedImage bufferedImage = ImageIO.read(bais); //    将图片加载到内存中
                //因为js里我们生成的图片是png格式,如果想转化格式的话,在内存中创建一个新的等大的空白图片
                  BufferedImage newBufferedImage =
     new BufferedImage(bufferedImage.getWidth(),bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
                //在新图片生绘制老图片
                 newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, null);
                 String dirPath = AppConfig.getUploadRoot() +filePth ;
                 //File dirFile = new File(dirPath);
                // if (!dirFile.exists()){
                             // dirFile.mkdirs();
                    // }
                    //创建一个.JPG文件
                     File newFile = new File(dirPath+".jpg");
                    //将内存中的图片写入到本地文件
                     ImageIO.write(newBufferedImage, "jpg", newFile);
                 return dirPath+".jpg";
             }


浪客行1213的简书



XHH
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 一、图形的组合方式 globalAlpha是一个介于0和1之间的值(包括0和1),用于指定所有绘制的透明度。默认值...
    空谷悠阅读 1,187评论 0 0
  • 创建媒体对象 navigator.getUserMedia详情介绍点击下面链接 MediaDevices.getU...
    WenGuoLiang阅读 753评论 0 1
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,103评论 1 45
  • 第一章 HTML5 (2014年10月29日发布)新特性: 10个 (1)新的语义标签 (2)增强型表单 (3)视...
    fastwe阅读 910评论 0 1
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 3,858评论 3 40