码迷,mamicode.com
首页 > 数据库 > 详细

[PWA] Access the Camera in a PWA built with React

时间:2018-12-31 22:37:32      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:load   .com   start   col   ali   use   none   accept   uil   

It‘s possible to access some, but not all, of the native device features from a PWA. One that we canaccess, is the camera and camera roll. We‘ll use two different methods to allow users to upload images to our application.

First, we‘ll add a file input that accepts images. We can specify a capture param, which will tell PWAs on mobile devices to prompt the user to take a picture with their camera.

Next, we‘ll access the camera feed directly by rendering a video tag, and accessing navigator.mediaDevices.getUserMedia directly - which will allow us to show a live video feed from the camera. Then, we can use a canvas tag to grab a frame from that video, and render the image.

 

class Profile extends Component {

  state = {
    image: null,
    supportsCamera: ‘mediaDevices‘ in navigator
  }

  changeImage = (e) => {
    this.setState({
      image: URL.createObjectURL(e.target.files[0])
    })
  }

  startChangeImage = () => {
    this.setState({ enableCamera: !this.state.enableCamera })
  }

  takeImage = () => {
    this._canvas.width = this._video.videoWidth
    this._canvas.height = this._video.videoHeight

    this._canvas.getContext(‘2d‘).drawImage(
      this._video,
      0, 0,
      this._video.videoWidth,
      this._video.videoHeight
    )

    this._video.srcObject.getVideoTracks().forEach(track => {
      track.stop()
    })

    this.setState({
      image: this._canvas.toDataURL(),
      enableCamera: false
    })
  }

  render() {
    return (
      <div>
        <nav className="navbar navbar-light bg-light">
            <span className="navbar-brand mb-0 h1">
              <Link to="/">
                <img src={Back} alt="logo" style={{ height: 30 }} />
              </Link>
              Profile
            </span>
        </nav>

        <div style={{ textAlign: ‘center‘ }}>
          <img 
            src={this.state.image || GreyProfile} alt="profile" 
            style={{ height: 200, marginTop: 50 }} 
          />
          <p style={{ color: ‘#888‘, fontSize: 20 }}>username</p>

          {
            this.state.enableCamera &&
            <div>
              <video 
                ref={c => {
                  this._video = c
                  if(this._video) {
                    navigator.mediaDevices.getUserMedia({ video: true })
                      .then(stream => this._video.srcObject = stream)
                  }
                }}
                controls={false} autoPlay
                style={{ width: ‘100%‘, maxWidth: 300 }}
              ></video>

              <br />

              <button
                onClick={this.takeImage}
              >Take Image</button>

              <canvas 
                ref={c => this._canvas = c}
                style={{ display: ‘none‘ }}
              />

            </div>
          }

          <br />
          {
            this.state.supportsCamera &&
            <button
              onClick={this.startChangeImage}
            >
              Toggle Camera
            </button>
          }
        </div>

      </div>
    )
  }

}

 

Video, Code

[PWA] Access the Camera in a PWA built with React

标签:load   .com   start   col   ali   use   none   accept   uil   

原文地址:https://www.cnblogs.com/Answer1215/p/10203370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!