2012-11-06 9 views
6

में एक छवि को एन्कोड करने के लिए कैसे करें I छवियों को प्राप्त करने के लिए एक फोनगैप एप्लिकेशन विकसित कर रहा है और navigator.getPicture विधि का उपयोग कर रहा हूं।जावास्क्रिप्ट

तरह से मैं चित्र हो रही है:

navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
destinationType: Camera.DestinationType.FILE_URI }); 

function onSuccess(imageURI) { 
    var image = document.getElementById('myImage'); 
    image.src = imageURI; 
} 

बस phonegap दस्तावेज़ के दशक में उदाहरण की तरह।

मैं imageURI का उपयोग करने में सक्षम होना चाहता हूं और फिर इसे बाद में अपलोड करने के लिए इसे छवि डेटा में परिवर्तित करना चाहता हूं।

अब तक मैं दोनों Get image data in JavaScript? और How can you encode a string to Base64 in JavaScript?

जब मैं निम्नलिखित की कोशिश की कोशिश की है, लौटने से पहले (मैं नहीं चाहता कि phonegap के FileTransfer उपयोग करना चाहते हैं)

function onSuccess(imageURI) { 
    getBase64Image(imageURI); 
} 

function getBase64Image(img) { 
    // Create an empty canvas element 
    var canvas = document.createElement("canvas"); 
    canvas.width = img.width; 
    canvas.height = img.height; 

    // Copy the image contents to the canvas 
    var ctx = canvas.getContext("2d"); 
    ctx.drawImage(img, 0, 0); 

    // Get the data-URL formatted image 
    // Firefox supports PNG and JPEG. You could check img.src to 
    // guess the original format, but be aware the using "image/jpg" 
    // will re-encode the image. 
    var dataURL = canvas.toDataURL("image/png"); 

    console.log(dataURL); //here is where I get 'data:,'  

    return dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 
} 

और प्रिंट dataURL। मुझे सामग्री के रूप में data:, मिल गया है।

मैं क्या गलत कर रहा हूं पर कोई विचार?

+0

एसक्यू में आपका स्वागत है। बहुत अच्छा पहला सवाल! +1 – simbabque

उत्तर

0

ठीक है आप इसे DATA_URL के रूप में प्राप्त करने का प्रयास कर सकते हैं। जब छवि को बेस 64 स्ट्रिंग में परिवर्तित किया जाता है तो आपका माइलेज भिन्न हो सकता है क्योंकि आप मेमोरी त्रुटि से बाहर हो सकते हैं।

navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
    destinationType: Camera.DestinationType.DATA_URL }); 

function onSuccess(imageURI) { 
    var image = document.getElementById('myImage'); 
    image.src = imageURI; 
} 

वैकल्पिक रूप से आप FileReader.readAsDataURL() का उपयोग कर सकते हैं।

canvas.toDataURL विधि Android के पुराने संस्करणों पर लागू नहीं की गई है।

+0

हाय साइमन, मैंने readAsDataURL करने का प्रयास किया लेकिन इसके साथ कोई भाग्य नहीं था। मैं DATA_URL का उपयोग नहीं करना चाहता था लेकिन मुझे लगता है कि यह एकमात्र विकल्प हो सकता है। धन्यवाद। – fabian