JPEGencoderを使って簡易カメラ作成

Webカメラを用いて画像として保存します。Webで履歴書を作成するサイトなどには便利だと思います。
個人的にはこれからいろいろ色とかフィルターがかけられるといいなぁって思います。
Red5がいらずphpだけでOKなのが魅力的です。
実際のサンプル
http://moeten.info/flex/20080419_cameraSaveJpeg/bin-release/main.html

3秒間カウントダウンが始まって、そののちシャッターとなります。
昨日のJPEGencoder+PHPをそのまま流用できるので、簡単です。
ソースはこちら

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.events.EffectEvent;
import mx.effects.Pause;
import mx.graphics.codec.JPEGEncoder;
private var num:Number;
private var camera:Camera;
//初期化関数
private function init():void{
    //カウンターを非表示にしておく
    myLabel.visible = false;
    //カメラの設定
    camera = Camera.getCamera();
    if (camera != null) {
        camera.setQuality(0, 95);
        camera.setMode(640 , 480 , 15 , true );
        camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
        myFlv.attachCamera( camera );
        myLog.text = "get camera ";
    } else {
        trace("You need a camera.");
        myLog.text = "not found camera ";
    }
}
//カメラアクティブイベント
private function activityHandler(e:ActivityEvent):void{
}
//シャッタースタート
private function onStart():void{
    myLog.text = "start";
    //カウンターを作成
    var cnt:int = 3;
    var pause:Pause = new Pause();
    pause.duration = 1000;//=1秒
    pause.target = this;
    pause.play();
    //ポーズエフェクトが終わったらとき
    pause.addEventListener(EffectEvent.EFFECT_END , function():void{
        myLabel.visible = true;
        //カウンターが0になったのでシャッターする
        if( cnt == 0 ){
            myLabel.visible = false;
            onSave();
        }else{
            myLabel.text = "" + cnt;
            cnt--;
            pause.play();
        }
    });
}
//現在のフレームを保存する
private function onSave():void{
    myLog.text = "save";
    //キャンバス画像用意
    var paint:BitmapData = new BitmapData( myFlv.width , myFlv.height );
    //ビデオ描画
    paint.draw(myFlv);
    //バイナリデーター作成
    var myEnc:JPEGEncoder = new JPEGEncoder(100);
    var byteArr:ByteArray = myEnc.encode(paint);
    //ファイル名用
    num = int( Math.random() * 10000 );
    //PHPへバイナリを送信する
    var urlRequest:URLRequest = new URLRequest("http://moeten.info/flex/20080416_jpegEnc/?img=" + num );
    var urlLoader:URLLoader = new URLLoader();
    urlRequest.contentType = "application/octet-stream";
    urlRequest.method = URLRequestMethod.POST;
    urlRequest.data = byteArr;
    urlLoader.addEventListener(Event.COMPLETE , onSaved );
    urlLoader.load(urlRequest);
}
//JPEG保存完了イベント
private function onSaved( e:Event ):void{
    //保存された画像を呼び出し
    myImage.source = "http://moeten.info/flex/20080416_jpegEnc/" + num + ".jpg";
}
]]>
</mx:Script>
<mx:GlowFilter blurX="10" blurY="10" color="0xff0000" id="myGlow" />
<mx:VideoDisplay x="10" y="10" width="600" height="480" id="myFlv"/>
<mx:Label x="253" y="175" text="1" width="126" height="168" id="myLabel" color="#FFFFFF" fontWeight="bold" fontSize="140" filters="{[myGlow]}" alpha="0.7"/>
<mx:Image x="618" y="10" width="600" height="480" id="myImage"/>
<mx:Button x="512" y="19" label="タイマー開始" click="onStart()"/>
<mx:TextArea id="myLog" x="10" y="498" width="352" height="180"/>
</mx:Application>