• 技术文章 >web前端 >H5教程

    js和HTML5基于过滤器从摄像头中捕获视频的方法

    不言不言2018-07-02 11:56:12原创1145
    这篇文章主要介绍了js+HTML5基于过滤器从摄像头中捕获视频的方法,涉及javascript基于html5元素操作多媒体的使用技巧,需要的朋友可以参考下

    本文实例讲述了js+HTML5基于过滤器从摄像头中捕获视频的方法。分享给大家供大家参考。具体如下:

    index.html页面:

    <p class="warning">
    <h2>Native web camera streaming (getUserMedia) is not supported in this browser.</h2>
    </p>
    <p class="container">
      <h3>Current filter is: None</h3>
      <button>Click here to change video filter</button>
      <p style="clear:both"></p>
      <p class="col">
        <h2>HTML5 <video> object</h2>
        <video></video>
      </p>
      <p class="col">
        <h2>HTML5 <canvas> object</h2>
        <canvas width="600" height="450"></canvas>
      </p>
    </p>

    style.css文件:

    .grayscale{
      -webkit-filter:grayscale(1);
      -moz-filter:grayscale(1);
      -o-filter:grayscale(1);
      -ms-filter:grayscale(1);
      filter:grayscale(1);
    }
    .sepia{
      -webkit-filter:sepia(0.8);
      -moz-filter:sepia(0.8);
      -o-filter:sepia(0.8);
      -ms-filter:sepia(0.8);
      filter:sepia(0.8);
    }
    .blur{
      -webkit-filter:blur(3px);
      -moz-filter:blur(3px);
      -o-filter:blur(3px);
      -ms-filter:blur(3px);
      filter:blur(3px);
    }
    .brightness{
      -webkit-filter:brightness(0.3);
      -moz-filter:brightness(0.3);
      -o-filter:brightness(0.3);
      -ms-filter:brightness(0.3);
      filter:brightness(0.3);
    }
    .contrast{
      -webkit-filter:contrast(0.5);
      -moz-filter:contrast(0.5);
      -o-filter:contrast(0.5);
      -ms-filter:contrast(0.5);
      filter:contrast(0.5);
    }
    .hue-rotate{
      -webkit-filter:hue-rotate(90deg);
      -moz-filter:hue-rotate(90deg);
      -o-filter:hue-rotate(90deg);
      -ms-filter:hue-rotate(90deg);
      filter:hue-rotate(90deg);
    }
    .hue-rotate2{
      -webkit-filter:hue-rotate(180deg);
      -moz-filter:hue-rotate(180deg);
      -o-filter:hue-rotate(180deg);
      -ms-filter:hue-rotate(180deg);
      filter:hue-rotate(180deg);
    }
    .hue-rotate3{
      -webkit-filter:hue-rotate(270deg);
      -moz-filter:hue-rotate(270deg);
      -o-filter:hue-rotate(270deg);
      -ms-filter:hue-rotate(270deg);
      filter:hue-rotate(270deg);
    }
    .saturate{
      -webkit-filter:saturate(10);
      -moz-filter:saturate(10);
      -o-filter:saturate(10);
      -ms-filter:saturate(10);
      filter:saturate(10);
    }
    .invert{
      -webkit-filter:invert(1);
      -moz-filter:invert(1);
      -o-filter: invert(1);
      -ms-filter: invert(1);
      filter: invert(1);
    }

    script.js 文件:

    // Main initialization
    document.addEventListener('DOMContentLoaded', function() {
      // Global variables
      var video = document.querySelector('video');
      var audio, audioType;
      var canvas = document.querySelector('canvas');
      var context = canvas.getContext('2d');
      // Custom video filters
      var iFilter = 0;
      var filters = [
        'grayscale',
        'sepia',
        'blur',
        'brightness',
        'contrast',
        'hue-rotate',
        'hue-rotate2',
        'hue-rotate3',
        'saturate',
        'invert',
        'none'
      ];
      // Get the video stream from the camera with getUserMedia
      navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia || navigator.msGetUserMedia;
      window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
      if (navigator.getUserMedia) {
        // Evoke getUserMedia function
        navigator.getUserMedia({video: true, audio: true}, onSuccessCallback, onErrorCallback);
        function onSuccessCallback(stream) {
          // Use the stream from the camera as the source of the video element
          video.src = window.URL.createObjectURL(stream) || stream;
          // Autoplay
          video.play();
          // HTML5 Audio
          audio = new Audio();
          audioType = getAudioType(audio);
          if (audioType) {
            audio.src = 'polaroid.' + audioType;
            audio.play();
          }
        }
        // Display an error
        function onErrorCallback(e) {
          var expl = 'An error occurred: [Reason: ' + e.code + ']';
          console.error(expl);
          alert(expl);
          return;
        }
      } else {
        document.querySelector('.container').style.visibility = 'hidden';
        document.querySelector('.warning').style.visibility = 'visible';
        return;
      }
      // Draw the video stream at the canvas object
      function drawVideoAtCanvas(obj, context) {
        window.setInterval(function() {
          context.drawImage(obj, 0, 0);
        }, 60);
      }
      // The canPlayType() function doesn't return true or false. In recognition of how complex
      // formats are, the function returns a string: 'probably', 'maybe' or an empty string.
      function getAudioType(element) {
        if (element.canPlayType) {
          if (element.canPlayType('audio/mp4; codecs="mp4a.40.5"') !== '') {
            return('aac');
          } else if (element.canPlayType('audio/ogg; codecs="vorbis"') !== '') {
            return("ogg");
          }
        }
        return false;
      }
      // Add event listener for our video's Play function in order to produce video at the canvas
      video.addEventListener('play', function() {
        drawVideoAtCanvas(this, context);
      }, false);
      // Add event listener for our Button (to switch video filters)
      document.querySelector('button').addEventListener('click', function() {
        video.className = '';
        canvas.className = '';
        var effect = filters[iFilter++ % filters.length]; // Loop through the filters.
        if (effect) {
          video.classList.add(effect);
          canvas.classList.add(effect);
          document.querySelector('.container h3').innerHTML = 'Current filter is: ' + effect;
        }
      }, false);
    }, false);

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    如何解决HTML5 虚拟键盘出现挡住输入框的问题

    HTML5 Plus 实现手机APP拍照或相册选择图片上传的功能

    以上就是js和HTML5基于过滤器从摄像头中捕获视频的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:HTML5声音录制和播放功能的实现 下一篇:html5调用app分享功能的介绍

    相关文章推荐

    • html5离线存储有哪些• h5新增标签audio与video的使用• 深入解析asp.net中mvc4自定义404页面(分享)• html5新增了什么• 你值得了解的HTTP缓存机制(代码详解)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网