/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ function takePicture(success, error, opts) { if (opts && opts[2] === 1) { capture(success, error); } else { var input = document.createElement('input'); input.type = 'file'; input.name = 'files[]'; input.onchange = function(inputEvent) { var canvas = document.createElement('canvas'); var reader = new FileReader(); reader.onload = function(readerEvent) { input.parentNode.removeChild(input); var imageData = readerEvent.target.result; return success(imageData.substr(imageData.indexOf(',') + 1)); } reader.readAsDataURL(inputEvent.target.files[0]); }; document.body.appendChild(input); } } function capture(success, errorCallback) { var localMediaStream; var video = document.createElement('video'); var button = document.createElement('button'); video.width = 320; video.height = 240; button.innerHTML = 'Capture!'; button.onclick = function() { // create a canvas and capture a frame from video stream var canvas = document.createElement('canvas'); canvas.getContext('2d').drawImage(video, 0, 0, 320, 240); // convert image stored in canvas to base64 encoded image var imageData = canvas.toDataURL('img/png'); imageData = imageData.replace('data:image/png;base64,', ''); // stop video stream, remove video and button localMediaStream.stop(); video.parentNode.removeChild(video); button.parentNode.removeChild(button); return success(imageData); } navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; var successCallback = function(stream) { localMediaStream = stream; video.src = window.URL.createObjectURL(localMediaStream); video.play(); document.body.appendChild(video); document.body.appendChild(button); } if (navigator.getUserMedia) { navigator.getUserMedia({video: true, audio: true}, successCallback, errorCallback); } else { alert('Browser does not support camera :('); } } module.exports = { takePicture: takePicture, cleanup: function(){} }; require("cordova/exec/proxy").add("Camera",module.exports);