Webcam.js is a JavaScript library that allows us to capture a picture from the webcam.
It uses HTML5 getUserMedia API to capture the picture. Flash is only usedĀ if the browser doesn’t support getUserMedia.

Table of Content
- Download and Include Webcam.js library
- Basic Example of Webcam.js
- Add sound while Capturing a Picture
- Save Image to the Server
- Conclusion
1. Download and Include Webcam.js library
- Download this from GitHub.
- Include
webcam.min.jsin the page.
<script type="text/javascript" src="webcamjs/webcam.min.js"></script>
2. Basic Example of Webcam.js
- Configure
By Webcam.set() function override the default setting. Call Webcam.attach() function on which pass the selector where you want to show live camera view.
Webcam.set({
width: 320,
height: 240,
image_format: 'jpeg',
jpeg_quality: 90
});
Webcam.attach( '#my_camera' );
- SnapShot
Just call Webcam.snap() function that has a callback function. The function contains the data_uri that you can use to show a preview or save as an image that generates after taking a snapshot.
Webcam.snap( function(data_uri) {
// display results in page
document.getElementById('results').innerHTML =
'<img src="'+data_uri+'"/>';
} );
Completed Code
<!-- CSS -->
<style>
#my_camera{
width: 320px;
height: 240px;
border: 1px solid black;
}
</style>
<div id="my_camera"></div>
<input type=button value="Take Snapshot" onClick="take_snapshot()">
<div id="results" ></div>
<!-- Webcam.min.js -->
<script type="text/javascript" src="webcamjs/webcam.min.js"></script>
<!-- Configure a few settings and attach camera -->
<script language="JavaScript">
Webcam.set({
width: 320,
height: 240,
image_format: 'jpeg',
jpeg_quality: 90
});
Webcam.attach( '#my_camera' );
<!-- Code to handle taking the snapshot and displaying it locally -->
function take_snapshot() {
// take snapshot and get image data
Webcam.snap( function(data_uri) {
// display results in page
document.getElementById('results').innerHTML =
'<img src="'+data_uri+'"/>';
} );
}
</script>
3. Add sound while Capturing a Picture
Create an Object of Audio() class and specify audio file and call play() method when the user clicks on the button to capture a picture.
Completed Code
<!-- CSS -->
<style>
#my_camera{
width: 320px;
height: 240px;
border: 1px solid black;
}
</style>
<!-- -->
<div id="my_camera"></div>
<input type=button value="Take Snapshot" onClick="take_snapshot()">
<div id="results" ></div>
<!-- Script -->
<script type="text/javascript" src="webcamjs/webcam.min.js"></script>
<!-- Code to handle taking the snapshot and displaying it locally -->
<script language="JavaScript">
// Configure a few settings and attach camera
Webcam.set({
width: 320,
height: 240,
image_format: 'jpeg',
jpeg_quality: 90
});
Webcam.attach( '#my_camera' );
// preload shutter audio clip
var shutter = new Audio();
shutter.autoplay = true;
shutter.src = navigator.userAgent.match(/Firefox/) ? 'shutter.ogg' : 'shutter.mp3';
function take_snapshot() {
// play sound effect
shutter.play();
// take snapshot and get image data
Webcam.snap( function(data_uri) {
// display results in page
document.getElementById('results').innerHTML =
'<img src="'+data_uri+'"/>';
});
}
</script>
4. Save Image to the Server
Store the generated value while taking the snapshot in a variable or element and callĀ Webcam.upload() method for saving.
The method takes 3 parameters –
- Generated base64 value
- Action URL ( for handling the value and saving to the directory )
- Callback function ( For handling response )
Webcam.upload( base64image, 'upload.php', function(code, text) {
});
HTML & Script
Create three buttons –
- 1st to configure the webcam,
- 2nd to take the snapshot, and
- 3rd for the save snapshot to the server.
<!-- CSS -->
<style>
#my_camera{
width: 320px;
height: 240px;
border: 1px solid black;
}
</style>
<!-- -->
<div id="my_camera"></div>
<input type=button value="Configure" onClick="configure()">
<input type=button value="Take Snapshot" onClick="take_snapshot()">
<input type=button value="Save Snapshot" onClick="saveSnap()">
<div id="results" ></div>
<!-- Script -->
<script type="text/javascript" src="webcamjs/webcam.min.js"></script>
<!-- Code to handle taking the snapshot and displaying it locally -->
<script language="JavaScript">
// Configure a few settings and attach camera
function configure(){
Webcam.set({
width: 320,
height: 240,
image_format: 'jpeg',
jpeg_quality: 90
});
Webcam.attach( '#my_camera' );
}
// A button for taking snaps
// preload shutter audio clip
var shutter = new Audio();
shutter.autoplay = false;
shutter.src = navigator.userAgent.match(/Firefox/) ? 'shutter.ogg' : 'shutter.mp3';
function take_snapshot() {
// play sound effect
shutter.play();
// take snapshot and get image data
Webcam.snap( function(data_uri) {
// display results in page
document.getElementById('results').innerHTML =
'<img id="imageprev" src="'+data_uri+'"/>';
} );
Webcam.reset();
}
function saveSnap(){
// Get base64 value from <img id='imageprev'> source
var base64image = document.getElementById("imageprev").src;
Webcam.upload( base64image, 'upload.php', function(code, text) {
console.log('Save successfully');
//console.log(text);
});
}
</script>
PHP (upload.php)
Create an upload.php file for uploading a file and upload folder to store files. Access file using webcam key – $_FILES['webcam'].
<?php
// new filename
$filename = 'pic_'.date('YmdHis') . '.jpeg';
$url = '';
if( move_uploaded_file($_FILES['webcam']['tmp_name'],'upload/'.$filename) ){
$url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/upload/' . $filename;
}
// Return image url
echo $url;
5. Conclusion
Call Webcam.attach() function to show the live camera view in the element and to take the snapshot call Webcam.snap() which gives you base64 format value as a response that you can use to show a preview or you can save it as an image on the server.
According to the Offical documentation, WebcamJS has been tested on the following browsers/operating systems:
| OS | Browser | Notes |
|---|---|---|
| Mac OS X | Chrome 30+ | Works — Chrome 47+ requires HTTPS |
| Mac OS X | Firefox 20+ | Works |
| Mac OS X | Safari 6+ | Requires Adobe Flash Player |
| Windows | Chrome 30+ | Works — Chrome 47+ requires HTTPS |
| Windows | Firefox 20+ | Works |
| Windows | IE 9 | Requires Adobe Flash Player |
| Windows | IE 10 | Requires Adobe Flash Player |
| Windows | IE 11 | Requires Adobe Flash Player |