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からローカルへのファイルの保存はいろんな場所で使えそうですね!
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













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では可能なんでしょうか??
有難う御座いました♪