dev.convexstyle.net

Personal work アーカイブ

YouTube - snapshot (1)

del.icio.us hatena bookmark

最近 YouTube が Video サイトとしてはかなりの人気で、何人かのクリエイターやプログラマーの方々がアプリケーションを作ってますが、自分も YouTube - snapshot というアプリケーションを作ってみた。

YouTube - snapshot
The screenshot of YouTube - snapshot

コンセプトは、YouTube から動画のキーワード検索して HTML 上に表示し、興味のある動画を Flash 内で再生。この動画のこのシーンが面白いとかブログに書き込んで人に伝えたい場合に、YouTube - snapshot で簡単に読み込んだ動画の好きなシーンのスナップショットを取ることです。


【技術】
Linux、Zend Framework、Proxy、MySQL、PHP、Smarty、Pear、Flash 8、Javascript、CSS、Photoshop、Express Install あたり

自分の担当領域は Flash 8、PHP(Flash 関連部分)、MySQL、Pear、Javascript、CSS、ExpressInstall、デザイン等辺りです。他は hotToast の Taro Yamamoto 氏が設定・作成しました。


【ダウンロード】
flash_sample.zip (fla、swf、html、flv ファイルが入っています)
*PHP ファイルに関しては次回の説明の際に提供します。


【ソース】
今回はどの様に Flash で動画のスナップショットを取得するかについて説明することにする。このプロジェクトすべてに関して説明するのは複雑になってしまうため、ポイントのみの端的なものにする。


(1)
ドキュメント上に Video オブジェクトを配置し FLV を Video オブジェクトに割り当てる。今回は FMS ではなく Proxy を通した FLV のため、ローカル接続するイメージで NetConnection オブジェクトで接続を確立する。同時に、NetStream オブジェクトを作成し、FLV の再生を始める。


// NetConnection オブジェクト設定
var nc:NetConnection = new NetConnection();
nc.connect(null);

// NetStream オブジェクト設定
var ns:NetStream = new NetStream(nc);

// Video 設定
sample_video.attachVideo(ns);
ns.play("test.flv");


(2)
上記で設定した FLV のスナップショット取得用プログラムを設定する。
Flash 8 から BitmapData という新しい class が追加され、bitmap データを Flash 内で動的に作成できるようになった。今回はこのクラスを使用することで、動的に動画のスナップショットを作成することにする。この bitmap データを movieClip に格納し表示するために attachBitmap を使用する。ただしこれだけだと単純な bitmap なので、draw 関数により、bitmap オブジェクトに対し、特定のリソースからの bitmap 情報を書き込む。これにより Flash 内で動画の画像が表示される。また、bitmapData オブジェクトが不必要になる場合、dispose 関数を使用し、bitmapData オブジェクトをメモリから開放する関数も設定する。


// snapshot 作成用関数
var bd:BitmapData;

function get_snapshot():Void {
var tmp:MovieClip = _root.createEmptyMovieClip("snap_mc", 10);
bd = new BitmapData(sample_video._width, sample_video._height, true, 0x00000000);
tmp.attachBitmap(bd, 1, "auto", true);
bd.draw(sample_video);
tmp._x = 300;
tmp._y = 126;
buttonset_mc.gotoAndStop(2);
save_mc._visible = true;
}

// snapshot 削除用関数
function clear_snapshot():Void {
bd.dispose();
buttonset_mc.gotoAndStop(1);
save_mc._visible = false;
}


(3)
このスナップショットを jpeg として保存する。
上記のままファイルを閉じると、先ほど作成した bitmap のスナップショットをデータとして保存することが出来ないため、getPixel を使用して 1 pixel ごとの bitmap の色情報を取得する。その色情報は PHP で管理しやすい様に、16 進数に変更し、Array に格納する。最後に LoadVars で色情報を PHP に送信するために toString 関数により Array 情報を一時的に string 化し、bitmap の幅・高さの値と共に LoadVars オブジェクトによりサーバ側に送信する。


// snapshot の色情報取得用関数
function save_snapshot():Void {

var colors:Array = new Array();
var w_total:Number = sample_video._width;
var h_total:Number = sample_video._height;

for(var w_each:Number = 0; w_each <= w_total; w_each++) {
for(var h_each:Number = 0; h_each <= h_total; h_each++) {
var tmp:String = bd.getPixel(w_each, h_each).toString(16);
colors.push(tmp);
}
}
var colors_str:String = colors.toString();
send_colorinfo(w_total, h_total, colors_str);
}


// snapshot の色情報をサーバ上に送信
function send_colorinfo(w:Number, h:Number, colors:String):Void {
var send_obj:LoadVars = new LoadVars();
send_obj.w = w;
send_obj.h = h;
send_obj.colors = colors;
send_obj.send("./get_snapshot.php", "_blank", "POST");
}


今回は Flash 8 から利用可能な BitmapData オブジェクトを使用し、どの様に動的に FLV の 色情報を取得し、bitmap を生成するかについて説明した。
次回はサーバサイドでどの様に Flash からの色情報を取得し、動的に jpeg を作成するかについてと、その他で覚えておきたいことをまとめることにする。

YouTube - snapshot (2)

del.icio.us hatena bookmark

前回の Flash 部分に引き続き、hotToast で制作した YouTube - snapshot の jpeg 画像作成部分に関して説明する。


YouTube - snapshot
The screenshot of YouTube - snapshot


【使用技術】
Linux、Zend Framework、Proxy、MySQL、PHP、Smarty、Pear、Flash 8、Javascript、CSS、Photoshop、Express Install あたり

【担当領域】
Flash 8、PHP(Flash 関連部分)、MySQL、Pear、Javascript、CSS、ExpressInstall、デザイン辺りです。他は hotToast の Taro Yamamoto 氏が設定・作成しました。


【ダウンロード】
php_sample.zip (php ファイルが入っています)


(1)
Flash から LoadVars により送信された POST 変数を取得する。


// POST 変数取得
$width = $_POST['w'];
$height = $_POST['h'];
$colors = explode(',' ,$_POST['colors']);

(2)
送信されてきた bitmap の幅・高さ・色情報を基に、jpeg ファイルを作成する。
作成の際、下記の様に 1 pixel 単位で RGB 情報を取得し、imagesetpixel で 作成した新規画像に割り当てる。


// 画像の作成
$image = (function_exists('imagecreatetruecolor')) ?
imagecreatetruecolor($width, $height) : imagecreate($width, $height);
$background = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $background);

// pixel 単位の画像作成

$i = 0;
for($x = 0; $x <= $width; $x++) {
for($y = 0; $y <= $height; $y++) {
// 6 文字以下の場合 0 を追加する
while(strlen($colors[$i]) < 6) $colors[$i] = "0".$colors[$i];
// 16 進法の等価の 10 進法に返す
$r = hexdec("0x".substr($colors[$i], 0, 2));
$g = hexdec("0x".substr($colors[$i], 2, 2));
$b = hexdec("0x".substr($colors[$i], 4, 2));
$pixelcolor = imagecolorallocate($image, $r, $g, $b);
imagesetpixel($image, $x, $y, $pixelcolor);
$i ++;
}
}

(3)
最後に Content-type を jpeg 用に指定し、imagejpeg 関数で jpeg ファイルを作成する。


// jpeg ファイルを作成
header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

FIFA World Cup 2006, Germany with Loopy

del.icio.us hatena bookmark

先日日本チームがワールドカップ予選で負けてしまって結構がっかりしてしまいましたが、ワールドカップは本選に入ってかなり面白くて寝不足になってます。個人的にはジェラードのいるイングランドに優勝してもらいたいですが、ブラジルやドイツも調子が良いようだし、難しそうですね。

FIFA World Cup 2006, Germany with Loopy

このワールドカップの流れに便乗して、以前に作った Loopy (スクリーンセーバー)を少しだけカスタマイズした FIFA WorldCup 2006, Germany with Loopy なるものを作ってみました。前回はスクリーンセーバーですが、今回はウェブ上で完結しています。通常の Loopy は新着の画像をひたすら loop しながら流し続けるものでしたが、今回は Flickr API でキーワード検索した結果を Loopy 上に流していく仕様です。もちろんキーワードは『worldcup』です。意外でしたが、ワールドカップの試合の直後とかにこのページにアクセスすると worldcup のライブ感が伝わってくる写真がかなり Flickr の方にアップロードされるいるようで、かなり面白いです。ただし、時間がずれると、時々違う worldcup の写真でフェンシングなどの写真が出てきて拍子抜けしたりもします。

是非、興味がある方は見てみてください。

FIFA World Cup 2006, Germany with Loopy


【サイト URL】
http://www.hottoast.org/fifaworldcup/

【使用技術】
Linux、Proxy、Flickr API、Photoshop、Illustrator、FlashMX 2004、Javascript、CSS など

【担当領域】
同上

Jacket Art Work

del.icio.us hatena bookmark

CD ジャケットからインスピレーションを得たことってないですか?
個人的には CD ジャケットのデザインって凄い個性的なものが多いし、CD ショップに行ったらジャケット買いしちゃうこともしばしばです。でも、あの空間は贅沢なぐらいアートの宝庫ですよね!!デザインで悩んだときとか新しい音楽を見つける時とか、よく Jacket を見に行ってインスピレーションとモチベーションを高めたりします。


Jacket Art Work
The screenshot of Jacket Art Work

そう思って、Jacket Art Work をリリースしました。
Jacket Art Work とは『Create your own jacket art work canpus』というコンセプトを基に、Amazon ECS を使用してキーワード検索した結果を表示します。検索結果はキーワードによって検索された CD ジャケットにより、個々の CD ジャケットが含んでいるアート性を保持しながら、全体的にジャケットの集合体という新たなデザイン性を生み出します。あなた次第でどんどん新たな Jacket Art Work Canpus を生み出すことが可能です。しかしここまでは普通の検索システムと同様なんですが、Jacket Art Work 上で検索して表示された CD ジャケットでイイな!!って思ったものにはタグをどんどんつけれます。そのタグがもしかしたら他のユーザーと同じくなる可能性もあるわけで、同じタグのポスト数を色(Jacket Art Work では Color Popularity と呼んでます。)として、認識できます。このColor Popularity としてカテゴライズされたタグから、今度は CD ジャケットのタグ検索が可能です。他の人がどんな CD ジャケットに同じタグをつけているか認識できるだけでなく、そこからさらに興味深い CD ジャケット集合体 Art Canpus を生み出します。当然、気に入ったジャケットの CD は直接アマゾンから即購入も可能です。ざっと概要はこんな感じですので、実際にどんどん CD ジャケットにタグをつけてアート性を楽しんだりジャケ買いしてはどうですか?

実はこれは因縁の作品。昨年の 10 月くらいに一度このアプリケーションを作成しましたが、構成上納得できない部分がありリリースしなかったのですが、リニューアルしてようやく今日無事にリリースできました。良かった、良かった。

【サイト URL】
http://www.hottoast.org/jacketartwork/


【使用技術】
Linux、Proxy、Amazon ECS、PHP5(AMFPHP)、PEAR、Smarty、SQLite、Flash 8(AS 2.0)、SoundForge 7、Javascript、CSS、Photoshop、Illustrator、ImageReady、Express Install
(開発段階では PERL、Flap を使用していました。)


【担当領域】
Amazon ECS(US、JP)、PHP5(AMFPHP)、PEAR、Smarty、SQLite、Flash 8(AS 2.0)、SoundForge 7、Javascript、CSS、Photoshop、Illustrator、ImageReady、Express Install など

Color Popularity in Jacket Art Work

del.icio.us hatena bookmark

先日のエントリーで紹介した Jacket Art Work
前回は CD ジャケットのデザイン性と、Amazon からの検索結果で構成される CD ジャケットの集合体のデザイン性について注目しましたが、今回はこのアプリケーションのもう 1 つの核である Color Popularity です。Color Popularity (勝手に私が命名しました。) はユーザーが気に入った CD ジャケットや興味ある CD ジャケットに対し、連想するタグを追加することで、どんどん可変していくカラーバリエーションのことです。同じタグが多いほどタグのカラーが明るくなっていき、暗いカラーほど同じタグが少ないことになります。色自体は 10 種類あり、全体のタグポスト数に対する比率でそれぞれのタグの色が決まってきます。もちろん、タグの削除なども認証無しにできるので、常にタグの Color Popularity は変化していきます。技術的には Tag Cloud と同じ考えですが、Jacket Art Work では色で表現する様にしています。開発途中でタグをたくさん追加していってたのですが、スクリーン上で偶然的かつ必然的なきれいなカラーレイアウトになっていました。見ものです。

是非トライして、Jacket Art Work の Color Popularity に変化を与えてみてはどうですか。


Jacket Art Work


【サイト URL】
http://www.hottoast.org/jacketartwork/


【使用技術】
Linux、Proxy、Amazon ECS、PHP5(AMFPHP)、PEAR、Smarty、SQLite、Flash 8(AS 2.0)、SoundForge 7、Javascript、CSS、Photoshop、Illustrator、ImageReady、Express Install
(開発段階では PERL、Flap を使用していました。)


【担当領域】
Amazon ECS(US、JP)、PHP5(AMFPHP)、PEAR、Smarty、SQLite、Flash 8(AS 2.0)、SoundForge 7、Javascript、CSS、Photoshop、Illustrator、ImageReady、Express Install など

YouTube - snapshot (3)

del.icio.us hatena bookmark

数々のユーザーの方々から希望があった、FLV の巻き戻しと FLV ダウンロード機能を YouTube - snapshot に追加。本来は正確に FLV の長さ(duration)を取得して、好きなポイントに seek させるべきですが、YouTube の FLV では onMetaData で duration を取得できないので断念し、巻き戻しは5秒前にジャンプさせるのみの対応です。


YouTube - snapshot
The screenshot of YouTube - snapshot


【リンク】
YouTube - snapshot
http://www.hottoast.org/snapshot/


【使用技術】
Linux、Zend Framework、Proxy、MySQL、PHP、Smarty、Pear、Flash 8、Javascript、CSS、Photoshop、Express Install あたり


【担当領域】
Flash 8、PHP(Flash 関連部分)、MySQL、Pear、Javascript、CSS、ExpressInstall、デザイン辺りです。

Flickr Time, The MOMMENT. At that time, what were you doing.

del.icio.us hatena bookmark

Flickr Time というデジタル時計インターフェースのアプリケーションを作ってみた。
時間が刻々と変わる中で世界各地から Flickr にアップロードされる写真で構成される時間と、写真好きの人達が色んな気持ちで撮ったであろう一瞬のショットを MOMMENT というコンセプトで表現してみた。新着や flickr central の XML や、タグ検索からの XML を基に、4つの digit を構成している。また、interestingness のクオリティの高い写真を使って、 瞬間(MOMMENT)を表現してみた。


Flickr Time, The MOMMENT.  At that time, what were you doing
Flickr Time, The MOMMENT. At that time, what were you doing.


【使用技術】
Flash 8(ActionScript 2.0)、PHP 5、Smarty、Pear、Proxy、PhotoShop、Javascript、CSS、HTML


【担当領域】
上記と同じ

Loopy 1.1

del.icio.us hatena bookmark

ユーザーさんからの不具合の報告で2年ほど前に作ったスクリーンセーバ Loopy を久々にアップデートしました。作成した時点では開発環境が Flash MX 2007 でしたが、Flash Player 8 + の環境から System.security.sandboxType が追加され、ローカルから外部サーバへのアクセスで生じる不具合が原因の様です。まだ Intel MAC には対応してませんが、最新版の screentime を購入して追々対応します。


loopy 1.1


【開発環境】
Flash 8 Professional、ActionScript 2.0、ScreenTime 3.01、Photoshop 7、Illustrator 7


【担当領域】
同上

総カロリー数動画計算

del.icio.us hatena bookmark

Apollo Application を実験的に個人で何かしら使ってみたかったので、"3食以外に自分がどれだけ食べるか"をコンセプトに、Apollo Application 内でウェブカメラ経由で動画をサーバに保存し、動画と商品名・各カロリー数・買った場所・日時を追加し総カロリー数を動画で計算していくアプリを作ってみました。メタボリックアプリケーションvidelog。あくまで今回は実験なのでクオリティとかコンセプトとかかなりユルイ感じで作ってます。


videlog.szp.jp
The screenshot of videlog.szp.jp


videlog  apollo application
The screenshot of videlog apollo application

続きを読む "総カロリー数動画計算" »