2011-07-05 17 views
5

私はAndroid上でWebアプリケーションを作成しています。ユーザーがタッチイベントを使用したいものを描画できるHTML5 Canvasがあります。そして、私はこれをsdcardに保存したいので、ローカルで。そして、そのようなことをするためにサーバー側のスクリプト(PHPなど)を使用することはできません。ファイルにhtml5キャンバス要素を保存する(ローカル)

<canvas id="example" height=450 width=300></canvas> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
    <script type="text/javascript" src="magictouch.js"></script> 

    <script> 

    var CanvasDrawr = function(options) { 

    var canvas = document.getElementById(options.id), 
    ctxt = canvas.getContext("2d"); 
    var img  = canvas.toDataURL("image/png"); 


    ctxt.lineWidth = options.size || Math.ceil(Math.random() * 35); 
    ctxt.lineCap = options.lineCap || "round"; 
    ctxt.pX = undefined; 
    ctxt.pY = undefined; 

    var lines = [,,]; 
    var offset = $(canvas).offset(); 

    var self = { 
    //bind click events 
    init: function() { 

    canvas.addEventListener('touchstart', self.preDraw, false); 
    canvas.addEventListener('touchmove', self.draw, false); 

    }, 

    preDraw: function(event) { 
      $.each(event.touches, function(i, touch) { 
       var id = touch.identifier; 
       lines[id] = { x  : this.pageX - offset.left, 
       y  : this.pageY - offset.top, 
       color : options.color || ["black"] 
       }; 
    }); 

    event.preventDefault(); 
    }, 

    draw: function(event) { 
    var e = event, hmm = {}; 

    $.each(event.touches, function(i, touch) { 
     var id = touch.identifier; 
     var moveX = this.pageX - offset.left - lines[id].x, 
     moveY = this.pageY - offset.top - lines[id].y; 

     var ret = self.move(id, moveX, moveY); 
     lines[id].x = ret.x; 
     lines[id].y = ret.y; 
    }); 

    event.preventDefault(); 
    }, 

    move: function(i, changeX, changeY) { 
    ctxt.strokeStyle = lines[i].color; 
    ctxt.beginPath(); 
    ctxt.moveTo(lines[i].x, lines[i].y); 

    ctxt.lineTo(lines[i].x + changeX, lines[i].y + changeY); 
    ctxt.stroke(); 
    ctxt.closePath(); 

    return { x: lines[i].x + changeX, y: lines[i].y + changeY }; 
    } 
}; 

    return self.init(); 
    }; 

    $(function(){ 
var super_awesome_multitouch_drawing_canvas_thingy = new CanvasDrawr({id:"example", size: 2 }); 
console.log('loaded'); 
     }); 

    </script> 
    </body> 

をしかし、私は、インターネット上で出会ったすべての例は、復号化し、画像としてcanvaを保存するために、サーバー上のPHPスクリプトを使用した:

私はmagictouch.js例を使用しています。そして、実際には、私のAndroidデバイス上で、私のsdcardで、HTML5/Javascriptだけを使ってそれをやりたがっています...

ありがとう。

+0

あなたはこれを理解しましたか? – user899641

答えて

0

ウェブページからファイルシステムにアクセスできないため、これは不可能です(ここではあまり役に立ちませんが、いくつかの場合を除いて)。

もちろん、このファイルを生成するためにサーバーを使用することをお勧めします。それは不可能なので、プラグインまたはJavaアプレットを使用してクライアント上で "ネイティブ"コードを実行する方法を見つけることができます。

+0

Phonekapを使用しているため、私のwebappは実際にはネイティブアプリの中にあります。私はまだapkファイルとネイティブAPIへのアクセス権を持っています。だから、それはwebappだけではない。私はfopen/fwriteをその用法で使うことはできないのですか? (私は試しましたが、何も起こりません)。 – dany

+0

私はphonegapを知らないので、私はあなたを助けることができない恐れがあります。 – slaphappy

2

ニヒロジックライブラリーをチェックしましたか? http://www.nihilogic.dk/labs/canvas2image/

toDataUrl()関数を使用すると、醜い名前の画像が表示されることがありますが、まだ画像が表示されます。

またdownloadify使用することができますが、それはフラッシュを使用して、私はhttps://github.com/dcneiner/Downloadify

はまた、私は、kbokのように、PhoneGapのを知らないあなたの場合、フラッシュが頻繁にアンドロイド上ではありません知っている依存していますが、おそらく両方を使用することを試みることができますcontext.toDataUrl()およびfwrite。

+0

私は何ですか: (...) var img64 = canvas.toDataURL( "image/png")。(/ data:image \/png; base64、/、 ''); var img_ok = decode_base64(img); navigator.notification.alert(img_ok); \t writer.write(img_ok、true); \t writer.close(); } しかし、私のPNGファイルが壊れています。 :/ – dany

+0

btw canvas2imageはかなりクールだと思われますが、私はそれが素晴らしいかもしれないことを避けることができたら、ユーザーにイメージを保存するように促したくありません – dany

+0

うん、ちょうどテスト、それは私が本当に探しているものではありません。私はちょうどPNGファイルを書きたいので、Canvas2Imageは強制的にプロンプ​​トを出します。 – dany

0

あなたはサーバー側の画像に変換してから、携帯電話に画像をダウンロードできるのはなぜですか?

+0

こんにちは、 これは顧客の署名で、ユーザーがオフラインになったときに管理する必要があるため、しばらくの間imgを保存する必要があります。 私は今、私のプロジェクトでさらに進んでいます。私はbase64でエンコードされたキャンバスを得ることができます、私はそれを解読しようとしましたが、今私のpngファイルが壊れているようです。 – dany

関連する問題