TEXT   16
JPEGCam
Guest on 10th June 2024 01:10:06 AM


  1. /* JPEGCam v1.0.9 */
  2. /* Webcam library for capturing JPEG images and submitting to a server */
  3. /* Copyright (c)  Joseph Huckaby <jhuckaby@goldcartridge.com> */
  4. /* Licensed under the GNU Lesser Public License */
  5. /* http://www.gnu.org/licenses/lgpl.html */
  6.  
  7. /* Usage:
  8.         <script language="JavaScript">
  9.                 document.write( webcam.get_html(320, 240) );
  10.                 webcam.set_api_url( 'test.php' );
  11.                 webcam.set_hook( 'onComplete', 'my_callback_function' );
  12.                 function my_callback_function(response) {
  13.                         alert("Success! PHP returned: " + response);
  14.                 }
  15.         </script>
  16.         <a href="javascript:void(webcam.snap())">Take Snapshot</a>
  17. */
  18.  
  19. // Everything is under a 'webcam' Namespace
  20. window.webcam = {
  21.         version: '1.0.9',
  22.        
  23.         // globals
  24.         ie: !!navigator.userAgent.match(/MSIE/),
  25.         protocol: location.protocol.match(/https/i) ? 'https' : 'http',
  26.         callback: null, // user callback for completed uploads
  27.         swf_url: 'webcam.swf', // URI to webcam.swf movie (defaults to cwd)
  28.         shutter_url: 'shutter.mp3', // URI to shutter.mp3 sound
  29.         api_url: '', // URL to upload script
  30.         loaded: false, // true when webcam movie finishes loading
  31.         quality: 90, // JPEG quality (1 - 100)
  32.         shutter_sound: true, // shutter sound effect on/off
  33.         stealth: false, // stealth mode (do not freeze image upon capture)
  34.         hooks: {
  35.                 onLoad: null,
  36.                 onComplete: null,
  37.                 onError: null
  38.         }, // callback hook functions
  39.        
  40.         set_hook: function(name, callback) {
  41.                 // set callback hook
  42.                 // supported hooks: onLoad, onComplete, onError
  43.                 if (typeof(this.hooks[name]) == 'undefined')
  44.                         return alert("Hook type not supported: " + name);
  45.                
  46.                 this.hooks[name] = callback;
  47.         },
  48.        
  49.         fire_hook: function(name, value) {
  50.                 // fire hook callback, passing optional value to it
  51.                 if (this.hooks[name]) {
  52.                         if (typeof(this.hooks[name]) == 'function') {
  53.                                 // callback is function reference, call directly
  54.                                 this.hooks[name](value);
  55.                         }
  56.                         else if (typeof(this.hooks[name]) == 'array') {
  57.                                 // callback is PHP-style object instance method
  58.                                 this.hooks[name][0][this.hooks[name][1]](value);
  59.                         }
  60.                         else if (window[this.hooks[name]]) {
  61.                                 // callback is global function name
  62.                                 window[ this.hooks[name] ](value);
  63.                         }
  64.                         return true;
  65.                 }
  66.                 return false; // no hook defined
  67.         },
  68.        
  69.         set_api_url: function(url) {
  70.                 // set location of upload API script
  71.                 this.api_url = url;
  72.         },
  73.        
  74.         set_swf_url: function(url) {
  75.                 // set location of SWF movie (defaults to webcam.swf in cwd)
  76.                 this.swf_url = url;
  77.         },
  78.        
  79.         get_html: function(width, height, server_width, server_height) {
  80.                 // Return HTML for embedding webcam capture movie
  81.                 // Specify pixel width and height (640x480, 320x240, etc.)
  82.                 // Server width and height are optional, and default to movie width/height
  83.                 if (!server_width) server_width = width;
  84.                 if (!server_height) server_height = height;
  85.                
  86.                 var html = '';
  87.                 var flashvars = 'shutter_enabled=' + (this.shutter_sound ? 1 : 0) +
  88.                         '&shutter_url=' + escape(this.shutter_url) +
  89.                         '&width=' + width +
  90.                         '&height=' + height +
  91.                         '&server_width=' + server_width +
  92.                         '&server_height=' + server_height;
  93.                
  94.                 if (this.ie) {
  95.                         html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+this.protocol+'://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="webcam_movie" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+this.swf_url+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/></object>';
  96.                 }
  97.                 else {
  98.                         html += '<embed id="webcam_movie" src="'+this.swf_url+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="webcam_movie" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" />';
  99.                 }
  100.                
  101.                 this.loaded = false;
  102.                 return html;
  103.         },
  104.        
  105.         get_movie: function() {
  106.                 // get reference to movie object/embed in DOM
  107.                 if (!this.loaded) return alert("ERROR: Movie is not loaded yet");
  108.                 var movie = document.getElementById('webcam_movie');
  109.                 if (!movie) alert("ERROR: Cannot locate movie 'webcam_movie' in DOM");
  110.                 return movie;
  111.         },
  112.        
  113.         set_stealth: function(stealth) {
  114.                 // set or disable stealth mode
  115.                 this.stealth = stealth;
  116.         },
  117.        
  118.         snap: function(url, callback, stealth) {
  119.                 // take snapshot and send to server
  120.                 // specify fully-qualified URL to server API script
  121.                 // and callback function (string or function object)
  122.                 if (callback) this.set_hook('onComplete', callback);
  123.                 if (url) this.set_api_url(url);
  124.                 if (typeof(stealth) != 'undefined') this.set_stealth( stealth );
  125.                
  126.                 this.get_movie()._snap( this.api_url, this.quality, this.shutter_sound ? 1 : 0, this.stealth ? 1 : 0 );
  127.         },
  128.        
  129.         freeze: function() {
  130.                 // freeze webcam image (capture but do not upload)
  131.                 this.get_movie()._snap('', this.quality, this.shutter_sound ? 1 : 0, 0 );
  132.         },
  133.        
  134.         upload: function(url, callback) {
  135.                 // upload image to server after taking snapshot
  136.                 // specify fully-qualified URL to server API script
  137.                 // and callback function (string or function object)
  138.                 if (callback) this.set_hook('onComplete', callback);
  139.                 if (url) this.set_api_url(url);
  140.                
  141.                 this.get_movie()._upload( this.api_url );
  142.         },
  143.        
  144.         reset: function() {
  145.                 // reset movie after taking snapshot
  146.                 this.get_movie()._reset();
  147.         },
  148.        
  149.         configure: function(panel) {
  150.                 // open flash configuration panel -- specify tab name:
  151.                 // "camera", "privacy", "default", "localStorage", "microphone", "settingsManager"
  152.                 if (!panel) panel = "camera";
  153.                 this.get_movie()._configure(panel);
  154.         },
  155.        
  156.         set_quality: function(new_quality) {
  157.                 // set the JPEG quality (1 - 100)
  158.                 // default is 90
  159.                 this.quality = new_quality;
  160.         },
  161.        
  162.         set_shutter_sound: function(enabled, url) {
  163.                 // enable or disable the shutter sound effect
  164.                 // defaults to enabled
  165.                 this.shutter_sound = enabled;
  166.                 this.shutter_url = url ? url : 'shutter.mp3';
  167.         },
  168.        
  169.         flash_notify: function(type, msg) {
  170.                 // receive notification from flash about event
  171.                 switch (type) {
  172.                         case 'flashLoadComplete':
  173.                                 // movie loaded successfully
  174.                                 this.loaded = true;
  175.                                 this.fire_hook('onLoad');
  176.                                 break;
  177.  
  178.                         case 'error':
  179.                                 // HTTP POST error most likely
  180.                                 if (!this.fire_hook('onError', msg)) {
  181.                                         alert("JPEGCam Flash Error: " + msg);
  182.                                 }
  183.                                 break;
  184.  
  185.                         case 'success':
  186.                                 // upload complete, execute user callback function
  187.                                 // and pass raw API script results to function
  188.                                 this.fire_hook('onComplete', msg.toString());
  189.                                 break;
  190.  
  191.                         default:
  192.                                 // catch-all, just in case
  193.                                 alert("jpegcam flash_notify: " + type + ": " + msg);
  194.                                 break;
  195.                 }
  196.         }
  197. };

Raw Paste

Login or Register to edit or fork this paste. It's free.