123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- cordova.define("cordova-plugin-camera.CameraProxy", function(require, exports, module) { /*
- *
- * 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.
- *
- */
- var HIGHEST_POSSIBLE_Z_INDEX = 2147483647;
- function takePicture (success, error, opts) {
- if (opts && opts[2] === 1) {
- capture(success, error, opts);
- } else {
- var input = document.createElement('input');
- input.style.position = 'relative';
- input.style.zIndex = HIGHEST_POSSIBLE_Z_INDEX;
- input.className = 'cordova-camera-select';
- input.type = 'file';
- input.name = 'files[]';
- input.onchange = function (inputEvent) {
- var reader = new FileReader(); /* eslint no-undef : 0 */
- 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, opts) {
- var localMediaStream;
- var targetWidth = opts[3];
- var targetHeight = opts[4];
- targetWidth = targetWidth === -1 ? 320 : targetWidth;
- targetHeight = targetHeight === -1 ? 240 : targetHeight;
- var video = document.createElement('video');
- var button = document.createElement('button');
- var parent = document.createElement('div');
- parent.style.position = 'relative';
- parent.style.zIndex = HIGHEST_POSSIBLE_Z_INDEX;
- parent.className = 'cordova-camera-capture';
- parent.appendChild(video);
- parent.appendChild(button);
- video.width = targetWidth;
- video.height = targetHeight;
- button.innerHTML = 'Capture!';
- button.onclick = function () {
- // create a canvas and capture a frame from video stream
- var canvas = document.createElement('canvas');
- canvas.width = targetWidth;
- canvas.height = targetHeight;
- canvas.getContext('2d').drawImage(video, 0, 0, targetWidth, targetHeight);
- // convert image stored in canvas to base64 encoded image
- var imageData = canvas.toDataURL('image/png');
- imageData = imageData.replace('data:image/png;base64,', '');
- // stop video stream, remove video and button.
- // Note that MediaStream.stop() is deprecated as of Chrome 47.
- if (localMediaStream.stop) {
- localMediaStream.stop();
- } else {
- localMediaStream.getTracks().forEach(function (track) {
- track.stop();
- });
- }
- parent.parentNode.removeChild(parent);
- return success(imageData);
- };
- navigator.getUserMedia = navigator.getUserMedia ||
- navigator.webkitGetUserMedia ||
- navigator.mozGetUserMedia ||
- navigator.msGetUserMedia;
- var successCallback = function (stream) {
- localMediaStream = stream;
- if ('srcObject' in video) {
- video.srcObject = localMediaStream;
- } else {
- video.src = window.URL.createObjectURL(localMediaStream);
- }
- video.play();
- document.body.appendChild(parent);
- };
- if (navigator.getUserMedia) {
- navigator.getUserMedia({video: true, audio: false}, successCallback, errorCallback);
- } else {
- alert('Browser does not support camera :(');
- }
- }
- module.exports = {
- takePicture: takePicture,
- cleanup: function () {}
- };
- require('cordova/exec/proxy').add('Camera', module.exports);
- });
|