Capturing image using device camera in reactjs

share link

by vsasikalabe dot icon Updated: Feb 16, 2023

technology logo
technology logo

Solution Kit Solution Kit  

To capture an image using the device camera in a React app, you will need to use the navigator.mediaDevices.getUserMedia() method.   

  • navigator.mediaDevices.getUserMedia(): This method asks the user for permission to use their camera and microphone.  
  • getUserMedia(): This method accepts an object with constraints indicating the type of media you want to access (such as video or audio) and returns a Promise that resolves with a MediaStream object if the user grants permission, rejects with an error if the user denies permission, or fails to resolve with an error if there is a problem retrieving the media.  


This method is deprecated in favor of the navigator.mediaDevices.getDisplayMedia() and navigator.mediaDevices.getUserMedia() methods. You should use these methods instead if possible.  

  • navigator.mediaDevices.getDisplayMedia(): This method asks the user if they want to record their screen or application window and then provides a MediaStream object with access to the screen or window.  
  • getDisplayMedia(): This method accepts an object with constraints that indicate the kind of media you wish to record (such as video or audio) and returns a Promise that resolves with a MediaStream object if the user provides permission or rejects with an error if there is a problem receiving the media.  


To know more about capturing an image using a device camera in ReactJs.  

Preview of the output that you will get on running this code from your IDE

Code:

In this solution we use the React library.

import React from "react";
import "./App.css";

class App extends React.Component {
  state = {
    imageDataURL: null,
  };

  initializeMedia = () => {
    this.setState({ imageDataURL: null });

    if (!("mediaDevices" in navigator)) {
      navigator.mediaDevices = {};
    }

    if (!("getUserMedia" in navigator.mediaDevices)) {
      navigator.mediaDevices.getUserMedia = function (constraints) {
        var getUserMedia =
          navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

        if (!getUserMedia) {
          return Promise.reject(new Error("getUserMedia Not Implemented"));
        }

        return new Promise((resolve, reject) => {
          getUserMedia.call(navigator, constraints, resolve, reject);
        });
      };
    }

    navigator.mediaDevices
      .getUserMedia({ video: true })
      .then((stream) => {
        this.player.srcObject = stream;
      })
      .catch((error) => {
        console.error(error)
       });
  };

  capturePicture = () => {
    var canvas = document.createElement("canvas");
    canvas.width = this.player.videoWidth;
    canvas.height = this.player.videoHeight;
    var contex = canvas.getContext("2d");
    contex.drawImage(this.player, 0, 0, canvas.width, canvas.height);
    this.player.srcObject.getVideoTracks().forEach((track) => {
      track.stop();
    });

    console.log(canvas.toDataURL());
    this.setState({ imageDataURL: canvas.toDataURL() });
  };

  render() {
    const playerORImage = Boolean(this.state.imageDataURL) ? (
      <img src={this.state.imageDataURL} />
    ) : (
      <video
        ref={(refrence) => {
          this.player = refrence;
        }}
        autoPlay
      ></video>
    );

    return (
      <div className="App">
        {playerORImage}
        <button onClick={this.initializeMedia}>Take Photo</button>
        <button onClick={this.capturePicture}>Capture</button>
      </div>
    );
  }
}

export default App;

Instructions

Follow the steps carefully to get the output easily.

  1. Install the Node.js and React on your IDE(preferable Visual Studio Code).
  2. Create React Application using npx create-react-app foldername.
  3. cd foldername.
  4. Open the folder in IDE.
  5. Copy the code using "copy" button above and paste it in App.js file(remove the earlier code from App.js).
  6. Open the terminal from IDE.
  7. npm start to run the file.


I hope you found this useful. I have added the link to dependent libraries, version information in the following sections.


I found this code snippet by searching for 'Capturing image using device camera in reactjs 'in kandi. You can try any such use case!

Environment Tested

I tested this solution in the following versions. Be mindful of changes when working with other versions.

  1. The solution is created in VS Code 1.73.1 version.
  2. The solution is tested on Nodejs 16.14.2 version.
  3. react 18.2.0 version.


Using this solution, we are able to Capturing image using device camera in reactjs with simple steps. This process also facilities an easy way to use, hassle-free method to create a hands-on working version of code which would help us to Capturing image using device camera in reactjs.

Dependent Libraries

create-react-appby facebook

JavaScript doticonstar image 100082 doticonVersion:v5.0.1doticon
License: Permissive (MIT)

Set up a modern web app by running one command.

Support
    Quality
      Security
        License
          Reuse

            create-react-appby facebook

            JavaScript doticon star image 100082 doticonVersion:v5.0.1doticon License: Permissive (MIT)

            Set up a modern web app by running one command.
            Support
              Quality
                Security
                  License
                    Reuse

                      You can search for any dependent library on kandi like react.

                      Support

                      1. For any support on kandi solution kits, please use the chat
                      2. For further learning resources, visit the Open Weaver Community learning page.

                      See similar Kits and Libraries