OdeToCode IC Logo

Capturing HTML 5 Video To An Image

Friday, January 4, 2013

A quick example to showing how to capture a still image from a video.

Assume you have the following HTML setup:

<video id="video" controls="controls">
    <source src=".mp4" />
</video>

<button id="capture">Capture</button>

<div id="output"></div>

Then when the user clicks the capture button, we'll write the current video contents into a canvas, and use the canvas to generate a data URL for an image to display.

(function() {
    "use strict";

    var video, $output;
    var scale = 0.25;

    var initialize = function() {
        $output = $("#output");
        video = $("#video").get(0);
        $("#capture").click(captureImage);                
    };

    var captureImage = function() {
        var canvas = document.createElement("canvas");
        canvas.width = video.videoWidth * scale;
        canvas.height = video.videoHeight * scale;
        canvas.getContext('2d')
              .drawImage(video, 0, 0, canvas.width, canvas.height);

        var img = document.createElement("img");
        img.src = canvas.toDataURL();
        $output.prepend(img);
    };

    $(initialize);            

}());