FlexでWebカメラを使ってスナップショット撮影し、サーバーを経由せずにローカルに保存させてみた
こんばんは。まだまだ正月ボケが抜けてない松田です。
ちょうど一年ぐらい前に、「Flex2でWebカメラを使ってスナップショット撮影してみた」という記事をあげました。これは、Webカメラで撮影した画像をローカルに保存するというモノだったのですが、撮影した画像をローカルにダウンロードさせるには、一度サーバーにアップロードしてサーバースクリプトでダウンロードさせるしかない、という非常に使いづらいものでした。
あれから1年が過ぎ、サーバーを経由せずに保存する方法が出来ているようなので作ってみました。
以前のFlashPlayerでは、ローカルへのファイルの保存が許可されていなかったため、それ以上どうしようも無かったのですが、FlashPlayer10からはFlashからのローカルへのファイルの保存ができるようになったようです。
というわけで、今回は以前のスクリプトを改造して、スナップショット撮影から画像の保存までをFlashアプリ単体でやってみました。
まずはFlexBuilder側でFlashPlayer10に対応したアプリをつくるための設定が必要になるのですが、これは以下のサイトで詳しく解説されていましたのでこちらを参考にしました。
Flex Builder 3をFlash Player 10に対応させる at AS3S.ORG
そして完成品が↓です。ソースコードは画面内を右クリックして「ソースの表示」を選択して下さい。
Webカメラが接続されているPCでしか動作しません。
動くっちゃ動きますが真っ黒い画像がダウンロードされるだけです。
以前のスクリプトから修正したポイントは、保存ボタンが押されたときに呼び出されるclickSave()メソッドのみです。
以下のスクリプトでファイルをローカルに保存しています。
Flashからローカルへのファイルの保存はいろんな場所で使えそうですね!
ちょうど一年ぐらい前に、「Flex2でWebカメラを使ってスナップショット撮影してみた」という記事をあげました。これは、Webカメラで撮影した画像をローカルに保存するというモノだったのですが、撮影した画像をローカルにダウンロードさせるには、一度サーバーにアップロードしてサーバースクリプトでダウンロードさせるしかない、という非常に使いづらいものでした。
あれから1年が過ぎ、サーバーを経由せずに保存する方法が出来ているようなので作ってみました。
以前のFlashPlayerでは、ローカルへのファイルの保存が許可されていなかったため、それ以上どうしようも無かったのですが、FlashPlayer10からはFlashからのローカルへのファイルの保存ができるようになったようです。
というわけで、今回は以前のスクリプトを改造して、スナップショット撮影から画像の保存までをFlashアプリ単体でやってみました。
まずはFlexBuilder側でFlashPlayer10に対応したアプリをつくるための設定が必要になるのですが、これは以下のサイトで詳しく解説されていましたのでこちらを参考にしました。
Flex Builder 3をFlash Player 10に対応させる at AS3S.ORG
そして完成品が↓です。ソースコードは画面内を右クリックして「ソースの表示」を選択して下さい。
Webカメラが接続されているPCでしか動作しません。
動くっちゃ動きますが真っ黒い画像がダウンロードされるだけです。
以前のスクリプトから修正したポイントは、保存ボタンが押されたときに呼び出されるclickSave()メソッドのみです。
以下のスクリプトでファイルをローカルに保存しています。
- var
ff:FileReference = new FileReference(); - ff.addEventListener(Event.OPEN,
function(e:Event):void {} ); - ff.addEventListener(ProgressEvent.PROGRESS,
function(e:ProgressEvent):void {} ); - ff.addEventListener(Event.COMPLETE,
function(e:Event):void {} ); - ff.addEventListener(Event.CANCEL,
function(e:Event):void {} ); - ff.addEventListener(Event.SELECT,
function(e:Event):void {} ); - ff.addEventListener(IOErrorEvent.IO_ERROR,
function(e:IOErrorEvent):void {} ); - var
date:Date = new Date(); - //
pngはByteArrayデータ - ff.save(png,
"snapshot" + date.getTime() + ".png");
Flashからローカルへのファイルの保存はいろんな場所で使えそうですね!
コメント
コメントフォーム
トラックバック
最近の記事
- もうすぐ健康診断があるんだ・・・ [2010年09月02日 : 阿部恵]
- Photoshopで壁紙を作りながら、基本的な使い方を覚える [2010年09月01日 : 鴨田健次]
- はじめての共同作業 Canvas編 (node.js + websocket) [2010年09月01日 : 中川善樹]
- 「PHP×Flex(後編)」PHPテクニカルセミナー(無料)第4弾の募集を開始しました!! [2010年08月26日 : 和田記光]
- 【HTML5】Canvasでお絵かきしてみた(前編) [2010年08月25日 : 橋本章史]
- MacにgroongaのMySQL用ストレージエンジン [2010年08月23日 : 笹亀弘]
- Appleのサイトで見たiPhone4をFireworksで描いてみました-1/2 [2010年08月19日 : 和田記光]
- iPad版の会社紹介を作ってみました [2010年08月19日 : 小林有佳]
- iPhoneアプリ開発開始時に気をつけるべきファイルの取り扱い (2) [2010年08月19日 : 亀本大地]
- symfonyセミナー動画無料公開! [2010年08月13日 : 岡本雄樹]



ReferenceError: Error #1069: flash.net.FileReference にプロパティ save が見つからず、デフォルト値もありません。
at CameraCapture/clickSave()
at CameraCapture/__btnSave_click()
がでるがエラー処理キボンヌ。
ご連絡ありがとうございます。
FileReferenceクラスにsave()機能が付いたのはFlashPlayerが10になってからなので、おそらくFlashPlayerのバージョンが古いのではないかと思われます。
貼り付けてあるFlashはFlashPlayer10以上じゃないと動かないようになってますので、FlashPlayerのバージョンを最新にしてからもう一度試してみていただけないでしょうか。
説明不足で申し訳ございません。
↓FlashPlayerのページです。
http://www.adobe.com/jp/products/flashplayer/
まだまだ勉強中な者ですが、
このツールをとても便利に思い、個人的に利用させて頂こうかと思います。
PNGではなく、JPGで保存したくて単純に『PNG』を「JPG」に置換しました。
var jpgEncoder:JPGEncoder = new JPGEncoder();
の部分でエラーは出ますが、動かしてみるとPNGで保存ができました。
JPEGで保存するにはどこを変更すれば良いでしょうか。
ご教授頂ければ幸いで御座います。
宜しくお願い致します。
jpg用のエンコーダーも用意されており、使用方法も全く同じなのですが、正式名称はJPGEncoderではなくJPEGEncoderになります。
ですので、PNGEncoderの部分をすべてJPEGEncoderに置換すればそれだけで動作するかと思います。
また、最後の行でダウンロードするファイル名を決めていますが、ここの拡張子も".png"から".jpg"に変更しておくと良いかと思います。
ご指摘の通り、JPEGEncoderに変更したら正常に動きました!!!!
やはりとても便利です☆☆
カウントダウンなんてできたらもっと利便性が上がるかもですね^^
そんな事ってFLEXでは可能なんでしょうか??
有難う御座いました♪