jscam.jsのソースコード「SWFの初期化」

説明

 「crocro.jscam」は、クロノス・クラウンの柳井政和が開発しているJavaScirptのライブラリです。「crocro.jscam」を使うと、JavaScriptからWebカメラを扱うことができます。また、簡単な図形認識などを行えます。

 このページでは、この「crocro.jscam」のコアになる「jscam.js」(ver 1.1.0)のソースコードのうち、「SWFの初期化」に相当する部分を掲載します。

ソースコード

以下、ソースコードです。

/*  jscam <http://crocro.com/html5/jscam/wiki.cgi>
    is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
    in a Japanese translation <http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license>
    Copyright (c) 2012 Masakazu Yanai / (c) 2012 Cronus Crown <webmaster@crocro.com>
*/

//== パッケージの初期化
if (typeof crocro == "undefined") var crocro = function() {};
if (typeof crocro.jscam == "undefined") crocro.jscam = function() {};

//== ======================================

    /**
     *  @variable   crocro.jscam.information
     *  @title  基本情報
     *  @description
     *
     *      「jscam」の基本情報が入ったオブジェクトです。
     *
     *      各情報は「crocro.jscam.information.version」のようにして取得できます。
     *
     *      <div>name - ライブラリ名。</div>
     *      <div>descriptionJa - 説明(日本語)。</div>
     *      <div>descriptionEn - 説明(英語)。</div>
     *      <div>version - バージョンのフル表記。「1.0.0」など。</div>
     *      <div>versionMajor - メジャーバージョンのみの数字。「1」など。</div>
     *      <div>author - 作者名。</div>
     *      <div>publisher - 配布元。</div>
     *      <div>lastModified - 最終更新日。</div>
     *      <div>url - 配布元のWebサイト。</div>
     *      <div>urlDownload - 配布元のダウンロード・サイト。</div>
     *      <div>copyright - 著作権表示。</div>
     *
     *  @param  arg     パラメータをオブジェクトで指定します。空の場合は無視されます。
     */
//== 基本情報
crocro.jscam.information = {
     name:          "crocro.jscam"
    ,descriptionJa: "JavaScriptでWebカメラの画像を取得するライブラリ"
    ,descriptionEn: "The library which operates a Web camera by JavaScript."
    ,version:       "1.1.0"
    ,versionMajor:  "1"
    ,author:        "Masakazu Yanai"
    ,publisher:     "Cronus Crown"
    ,lastModified:  "2012/01/25"
    ,url:           "http://crocro.com/"
    ,urlDownload:   "http://crocro.com/html5/jscam/wiki.cgi"
    ,copyright:     "(c) 2012 Masakazu Yanai / (c) 2012 Cronus Crown"
};


//== ======================================
    /**
     *  @variable   crocro.jscam.write(arg)
     *  @title  jscamのswfを書き出し
     *  @description
     *
     *      bodyタグ内で使います。この場所にjscamのオブジェクトを書き出します。
     *
     *      argは「{fps: 8, dir: "./js/"}」のようにオブジェクトで指定します。
     *      argに指定可能な値は以下の通りです。
     *
     *      <div>fps - fps。</div>
     *      <div>dir - jscam.swfの置いてあるディレクトリ。</div>
     *      <div>w - 横幅。</div>
     *      <div>h - 高さ。</div>
     *
     *  @param  arg     パラメータをオブジェクトで指定します。空の場合は無視されます。
     */
    /**
     *  @variable   crocro.jscam.option
     *  @title  jscamの設定
     *  @description
     *
     *      writeで作成されたjscamの設定が格納されたオブジェクトです。
     *
     *      「crocro.jscam.option.w」のようにして、値を取得できます。
     *      利用できる設定は以下の通りです。
     *
     *      <div>fps - fps。</div>
     *      <div>dir - jscam.swfの置いてあるディレクトリ。</div>
     *      <div>w - 横幅。</div>
     *      <div>h - 高さ。</div>
     *
     *  @param  arg     パラメータをオブジェクトで指定します。空の場合は無視されます。
     */
//== Flash初期化用
crocro.jscam.option = {};
crocro.jscam.write = function(arg) {
    // 設定
    if (! arg) arg = {};
    var opt = {};
    var defaults = {
         fps: 8
        ,dir: ""
        ,w: 320
        ,h: 240
    };
    var flVarsArr = [];
    for (var key in defaults) {
        opt[key] = defaults[key];
        if (key in arg) opt[key] = arg[key];
        flVarsArr.push(key + "=" + opt[key]);
    }
    crocro.jscam.option = opt;
    var flVars = flVarsArr.join("&");

    // HTML出力
    var flArr = [];
    flArr.push('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \
        codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" \
        width="' + opt.w + '" height="' + opt.h + '" id="externalSwfCam" align="middle">');
    flArr.push('<param name="allowScriptAccess" value="always" />');
    flArr.push('<param name="allowFullScreen" value="false" />');
    flArr.push('<param name="movie" value="' + opt.dir + 'jscam.swf" />');
    flArr.push('<param name="quality" value="high" />');
    flArr.push('<param name="bgcolor" value="#cccccc" />');
    flArr.push('<param name="FlashVars" value="' + flVars + '" />');
        // ↑↓scrW=?&scrH=?&fps=? が設定可能
    flArr.push('<embed src="' + opt.dir + 'jscam.swf" FlashVars="' + flVars + '"');
    flArr.push('quality="high" bgcolor="#ffffff" \
        width="' + opt.w + '" height="' + opt.h + '" align="middle" \
        name="externalSwfCam" allowScriptAccess="always" allowFullScreen="false" \
        type="application/x-shockwave-flash" \
        pluginspage="http://www.macromedia.com/go/getflashplayer" />');
    flArr.push('</object>');

    document.writeln(flArr.join("\n"));
};

//== SWFのブラウザ対応呼び出し
crocro.jscam.getSwf = function(str) {
    if (navigator.appName.indexOf("Microsoft") >= 0
     && new String(document[str]).indexOf("ObjectElement") < 0)
        return window[str];     // IE8以下
    return document[str];       // IE以外、IE9以上
};


    /**
     *  @variable   crocro.jscam.initSwfCam()
     *  @title  カメラ初期化
     *  @description
     *
     *      Flashのカメラ取得用オブジェクトを初期化します。
     */
//== SwfCamの初期化
crocro.jscam.swfCam = null;
crocro.jscam.initSwfCam = function() {
    var swfCam = crocro.jscam.getSwf("externalSwfCam");
    swfCam.enable = true;

    // キャンバスが使えるか確認
    if (! window.HTMLCanvasElement) {
        swfCam.enable = false;  // キャプチャ不可
        alert("Don't use this browser.");
    }
    crocro.jscam.swfCam = swfCam;       // 外部から参照利用可能に
};


    /**
     *  @variable   crocro.jscam.ready(fnc)
     *  @title  カメラ開始時のコールバック
     *  @description
     *
     *      カメラが開始した時にコールバック実行したいfunctionオブジェクトを指定します。
     *
     *  @param  fnc     コールバック実行させるfunctionオブジェクト。
     */
//== SwfCamの準備完了コールバック
crocro.jscam.callbackReady = null;
crocro.jscam.ready = function(fnc) {
    if (typeof fnc == "function") crocro.jscam.callbackReady = fnc;
};
crocro.jscam.readyFromSwf = function(prm) {
    if (crocro.jscam.callbackReady) {
        setTimeout(function() {
            crocro.jscam.callbackReady(prm)
        }, 10);
    }
}
Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2024 Cronus Crown (c)1997-2024 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について