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>