WEBカメラの画像を定期的にサーバーへアップするやつを発表したんだけど、結構仕組みを質問されたからソース公開しておく。
ちなみにこちらを参考にしました。
FICC LABS | Flashから画像ファイルを保存する
http://www.ficc.jp/labs/archives/ando/flash/
ソースはこちらから
http://un-q.net/2007/07/23/files/Camera2JPG.as.zip
以下のライブラリにcom.adobe.images.JPGEncoderってのがあるのでそれを使います
http://as3corelib.googlecode.com/
JPGEncoderはbitmapdataをJPGのByteArrayに変換してくれるので、それをサーバー側に投げてファイルにして保存してるだけです。
重要なのはこの辺かな。
bmd.draw(video); // カメラの内容をdraw
var jpge:JPGEncoder = new JPGEncoder(80);
var byteArr:ByteArray = jpge.encode(bmd);
urlRequest = new URLRequest(phpPath); // 保存用のPHP
urlLoader = new URLLoader();
urlRequest.contentType = "application/octet-stream";
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = byteArr;
urlLoader.load(urlRequest);
ちなみにPHPのソースは
$fileName = time()."-".round(rand(1,10000)).".jpg";
$fp = fopen("img/".$fileName, 'wb');
fwrite($fp, $GLOBALS['HTTP_RAW_POST_DATA']);
fclose($fp);
print $fileName;
だけ
WEBカメラ扱うのは、なかなかおもしろいっすな。
![Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]](http://ecx.images-amazon.com/images/I/617sNhK9P9L._SL160_.jpg)




コメント (2)
WCAN miniお疲れさまです。
アップルップルの高橋です。
>fwrite($fp, $GLOBALS['HTTP_RAW_POST_DATA']);
受け取ったデータを
そのままストリームに流し込む?みたいな感じでしょうか?
$GLOBALS['HTTP_RAW_POST_DATA']
というのは知りませんでした。
他にもいろいろ面白いことができそうですね。
投稿者: 高橋 | 2007年07月24日 16:02
日時: 2007年07月24日 16:02
$GLOBALS['HTTP_RAW_POST_DATA']はmimeが判定できないときだけアクセス可能な変数なので、php://inputの方をつかってストリームを開いたほうがいいですよ。
あと、com.adobe.images.JPGEncoderとcom.adobe.images.PNGEncoderは、Flex3からは標準になるみたいですね。
それぞれ、
mx.graphics.codec.PNGEncoder
mx.graphics.codec.JpegEncoder
と変更されてます、encode()メソッドがスタティックメソッドからインスタンスメソッドに代わってたりと微妙に変わってるっぽいです。
投稿者: {eL_e3電気を大切に | 2007年08月03日 16:42
日時: 2007年08月03日 16:42