123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import flash.events.MouseEvent;
- import flash.Lib;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.MovieClip;
- import flash.media.Video;
- import flash.media.Camera;
- import flash.events.StatusEvent;
- import flash.external.ExternalInterface;
- import flash.media.Sound;
- import flash.net.URLRequest;
- import flash.geom.Rectangle;
- import flash.utils.ByteArray;
- import haxe.crypto.Base64;
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- import feffects.Tween;
- class ElggWebcamPlugin {
- public static function main() {
- var cam = new Webcam();
- }
- }
- class Webcam {
- var mc:MovieClip;
- var vid:Video;
- var cam:Camera = Camera.getCamera();
- var vidContainer:MovieClip;
- var hasSnap:Bool = false;
- var videoWidth = Lib.current.stage.stageWidth;
- var videoHeight = Lib.current.stage.stageHeight;
- var siteURL = ExternalInterface.call('elgg.get_site_url');
- var shutterSound:Sound;
- public function new() {
- if (cam != null) {
- cam.addEventListener(StatusEvent.STATUS, camInit);
- cam.setMode(320, 240, 30);
- cam.setQuality(0, 100);
- mc = Lib.current;
- vid = new Video(cam.width, cam.height);
- vid.attachCamera(cam);
- // have to have a container to attach a click event.
- vidContainer = new MovieClip();
- vidContainer.addChild(vid);
- vidContainer.width = videoWidth;
- vidContainer.height = videoHeight;
- mc.addChild(vidContainer);
- shutterSound = new Sound(new URLRequest(siteURL + "/mod/webcam/haxe/shutter.mp3"));
- // pause / unpause on click
- vidContainer.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) {
- if (!hasSnap) {
- shutterSound.play();
- var bitmapData: BitmapData = new BitmapData(cam.width, cam.height);
- var bitmap: Bitmap = new Bitmap(bitmapData);
- // place over playing video
- bitmap.x = 0;
- bitmap.y = 0;
- bitmap.width = videoWidth;
- bitmap.height = videoHeight;
- bitmap.name = "snap";
- mc.addChild(bitmap);
- bitmapData.draw(vid);
-
- hasSnap = true;
- var byteArray:ByteArray = new ByteArray();
- byteArray = bitmapData.encode(new Rectangle(0, 0, cam.width, cam.height), new flash.display.JPEGEncoderOptions());
- var base64 = Base64.encode(haxe.io.Bytes.ofData(byteArray));
- ExternalInterface.call('elgg.avatar.saveBase64Input', base64, '.elgg-form-avatar-upload');
- ExternalInterface.call('elgg.avatar.saveBase64Input', base64, '.elgg-form-register');
- } else {
- mc.removeChild(mc.getChildByName("snap"));
- ExternalInterface.call('elgg.avatar.removeBase64Input');
- hasSnap = false;
- }
- });
- } else {
- var text = new TextField();
- text.text = "No cameras found.";
- text.autoSize = TextFieldAutoSize.LEFT;
- mc = Lib.current;
- mc.addChild(text);
- }
- }
- public function camInit(event:StatusEvent) {
- if (event.code == "Camera.Muted") {
- var text = new TextField();
- text.text = "Permission to access camera was denied.";
- text.autoSize = TextFieldAutoSize.LEFT;
- mc = Lib.current;
- mc.addChild(text);
- } else {
- // @todo this doens't work.
- // cam.setMode(320, 240, 30);
- // cam.setQuality(0, 100);
- }
- cam.removeEventListener(StatusEvent.STATUS, camInit);
- }
- }
|