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

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

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

时间: 2024-11-02 21:40:21

[PWA] Access the Camera in a PWA built with React的相关文章

[PWA] Add Push Notifications to a PWA with React in Chrome and on Android

On Android and in Chrome (but not on iOS), it's possible to send push notifications with a PWA. We'll start by asking the user for permission to send them push notifications, and then look at how to intercept the push event in a service worker. We ca

PWA(Progressive Web App)入门系列:(一)PWA简介

前言 PWA做为一门Google推出的WEB端的新技术,好处不言而喻,但目前对于相关方面的知识不是很丰富,这里我推出一下这方面的入门教程系列,提供PWA方面学习. 什么是PWA PWA全称Progressive Web App,直译是渐进式WEB应用,是 Google 在 2015 年提出,2016年6月才推广的项目.是结合了一系列现代Web技术的组合,在网页应用中实现和原生应用相近的用户体验. 所谓的P(Progressive)这里有两层含义,一方面是渐进增强,让WEB APP的体验和功能能够

PWA(Progressive Web App)入门系列:(一)PWA简单介绍

前言 PWA做为一门Google推出的WEB端的新技术,长处不言而喻.但眼下对于相关方面的知识不是非常丰富.这里我推出一下这方面的新手教程系列.提供PWA方面学习. 什么是PWA PWA全称Progressive Web App,直译是渐进式WEB应用,是 Google 在 2015 年提出,2016年6月才推广的项目.是结合了一系列现代Web技术的组合.在网页应用中实现和原生应用相近的用户体验. 所谓的P(Progressive)这里有两层含义,一方面是渐进增强,让WEB APP的体验和功能能

Team Foundation Server (TFS)与Project Server集成,使用DNS(友好地址)地址注册PWA

问题描述: 当Team Foundation Server(TFS 2010/2012/2013)与Project Server高可用性的环境集成时,必然会使用Project Server (PWA)的DNS地址注册PWA站点(RegisterPWA),而不是使用Project Server的计算机名注册,这样就会出现如下图所示的问题: 下图是执行注册PWA命令时出错的截屏 注册命令:tfsadmin project server /RegisterPWA /tfs:http://tfs2013

PWA web应用模型

2018年的第一篇博客,最近都去挤图书馆了,希望新年新气象... 简介 PWA 是一门Google推出的web前端新技术,全称是Progressive Web App,是Google在2015年提出,2016年6月推广的项目,是结合了一系列现代Web技术的组合,在网页应用中实现和原生应用相近的用户体验. PWA并不是描述一个技术,而是一些技术的合集.PWA 是专门应对手机 Web 开发而提出的,通过新技术的成熟,实现最好的 Web + 手机 APP.就是说,让你在使用 Web 的时候感觉像是在使

网页前端黑科技PWA的优劣对比

2016年,PWA在google正式落地,基于Chromium的浏览器Chrome和Opera已经完全支持PWA了,随着 iOS 11.3 的发布,iOS正式开始支持PWA,Windows Edge 支持PWA,随着越来越多的游览器大厂,相继的对PWA做出了支持和优化,想必PWA的时代即将到来. 天生优势: 无需安装,无需下载,只要你输入网址访问一次,然后将其添加到设备桌面就可以持续使用. 发布不需要提交到app商店审核 更新迭代版本不需要审核,不需要重新发布审核 现有的web网页都能通过改进成

Android 各版本信息 (维基百科)

The following tables show the release dates and key features of all Android operating system updates to date, listed chronologically by their official application programming interface (API) levels. Android 1.0 (API level 1) Android 1.0 (API level 1)

大前端技术系列:TWA技术+TensorFlow.js =&gt; 集成原生和AI功能的app

大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWxy/twa-tf.js , ) 什么是TWA 简单来讲,TWA(Trusted Web Activity 可信任的网络应用)即: 基于Chrome Custom Tabs,利用谷歌浏览器提供的api,实现强大功能的桌面应用技术. 如果说你对PWA这个概念有所了解,那么TWA的实现就相当于 PWA + 更丰

Devexpress VCL Build v2014 vol 14.2.5 发布

和xe8 几乎同一天出来,但是目前官方不支持xe8. The following sections list all minor and major changes in DevExpress VCL 14.2.5. Note that products, controls and libraries which aren't mentioned in the list below are included in the unified installer for compatibility,