2011-07-05 15 views
5

पर HTML5 कैनवास तत्व सहेजें मैं एंड्रॉइड पर एक वेबपैप कर रहा हूं, और मेरे पास एक HTML5 कैनवास है जिस पर कोई उपयोगकर्ता टच ईवेंट का उपयोग करके वह आकर्षित कर सकता है। और मैं इसे एक एसडीकार्ड पर सहेजना चाहता हूं, इसलिए स्थानीय में। और उस सामान को करने के लिए किसी सर्वर साइड स्क्रिप्ट (php आदि) का उपयोग नहीं कर सकता।फ़ाइल (स्थानीय)

मैं एक magictouch.js उदाहरण उपयोग कर रहा हूँ:

<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 स्क्रिप्ट के साथ इस्तेमाल किया गया। और वास्तव में बस अपने एंड्रॉइड डिवाइस पर, मेरे एसडीकार्ड में, एचटीएमएल 5/जावास्क्रिप्ट का उपयोग करके करना चाहते हैं ...

धन्यवाद।

+0

क्या आपने कभी यह पता लगाया है? – user899641

उत्तर

0

यह संभव नहीं है क्योंकि आपके पास किसी वेब पेज से फ़ाइल सिस्टम तक पहुंच नहीं है (कुछ किनारे के मामलों को छोड़कर, जो यहां उपयोगी नहीं हैं)।

मैं निश्चित रूप से सलाह दूंगा कि इस फ़ाइल को उत्पन्न करने के लिए सर्वर का उपयोग करना है। चूंकि यह संभव नहीं है, इसलिए आपको प्लगइन या जावा एप्लेट का उपयोग करके क्लाइंट पर "मूल" कोड निष्पादित करने का कोई तरीका मिल सकता है।

+0

मेरा वेबपैप वास्तव में मूल ऐप के अंदर है, क्योंकि मैं फोनगैप का उपयोग करता हूं, फिर भी मेरे पास एक एपीके फ़ाइल है और मूल निवासी एपीआई तक पहुंच है। तो यह 'केवल' वेबपैप नहीं है। मैं उस उपयोग के लिए fopen/fwrite का उपयोग नहीं कर सकता? (मैंने कोशिश की लेकिन कुछ भी नहीं होता)। – dany

+0

ठीक है मुझे फोनगैप नहीं पता है इसलिए मुझे डर है कि मैं आपकी मदद नहीं कर सकता। – slaphappy

2

क्या आपने निहिलोगिक पुस्तकालय की जांच की? http://www.nihilogic.dk/labs/canvas2image/

यह डेटाटाल() फ़ंक्शन का उपयोग करता है ताकि आपको चित्रों का बदसूरत नाम मिल सके लेकिन फिर भी आपके पास एक तस्वीर होगी।

तुम भी downloadify उपयोग कर सकते हैं, लेकिन यह फ्लैश का उपयोग करें और मैं जानता हूँ कि फ्लैश अक्सर एंड्रॉयड पर नहीं है, निर्भर अपने मामले https://github.com/dcneiner/Downloadify

इसके अलावा, मैं, kbok की तरह, PhoneGap पता नहीं है, लेकिन आप शायद दोनों का उपयोग करने की कोशिश कर सकते context.toDataUrl() और fwrite।

+0

मैं क्या करता हूं: (...) var img64 = canvas.toDataURL ("image/png")। (/ डेटा: छवि \/png; base64, /, '') को प्रतिस्थापित करें; var img_ok = decode_base64 (img); navigator.notification.alert (img_ok); \t writer.write (img_ok, true); \t writer.close(); } लेकिन मेरी पीएनजी फ़ाइल दूषित है। :/ – dany

+0

btw canvas2image बहुत अच्छा लगता है, लेकिन मुझे लगता है, छवि को बचाने के लिए अगर मैं से बच सकते हैं यह अच्छा – dany

+0

हाँ बस का परीक्षण हो सकता है, कि नहीं क्या मैं सच की तलाश में हूँ उपयोगकर्ता संकेत करने के लिए नहीं करना चाहती। क्योंकि मैं सिर्फ पीएनजी फ़ाइल लिखना चाहता हूं, और कैनवास 2 इमेज प्रॉम्प्ट को बल देता हूं। – dany

0

आप सर्वर की ओर से किसी छवि को क्यों परिवर्तित नहीं करते हैं और फिर उपयोगकर्ता को अपने फोन पर छवि डाउनलोड करने की अनुमति देते हैं?

+0

हाय, इस वजह से एक ग्राहक के हस्ताक्षर है और मैं उपयोगकर्ता के ऑफ़लाइन होने प्रबंधन करने के लिए है कि, तो मैं थोड़ी देर के लिए img स्टोर करने के लिए किया है। अब मैं अपने प्रोजेक्ट में अधिक उन्नत हूं। मैं बेस 64 में एन्कोड किए गए कैनवास प्राप्त कर सकता हूं, मैंने इसे डीकोड करने का प्रयास किया लेकिन अब मेरी पीएनजी फ़ाइल दूषित लगती है। – dany

संबंधित मुद्दे