2012-08-09 16 views
19

मैं कुछ जावास्क्रिप्ट कोड पर काम कर रहा हूं जो फ़ोटोशॉप द्वारा एम्बेडेड पथों का उपयोग करके छवि का अल्फा मास्क बनाता है। एक आईएमजी टैग का अधिभार हैंडलर एक क्लिप (यह) कॉल करेगा। फ़ंक्शन छवि की स्रोत फ़ाइल लोड करता है और इसके माध्यम से स्कैन करता है। यहाँ सेटअप है:IE9 में बाइनरी डेटा कैसे पढ़ा जाए?

function clip(img) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', img.src, true); 
    xhr.responseType = 'arraybuffer'; 
    xhr.target = img; 

    xhr.onload = function(e) { 
     var bytes = new Uint8Array(this.response); 
     var p = findPhotoshopSegment(bytes); 
     if(p) { 
      var paths = parse8BIMData(bytes, p); 

      /* ... replaces IMG with SVG tag ... */ 
     } 
    }; 
    xhr.send(); 
} 

आप वर्तमान में http://flaczki.net46.net/JPEG/SVG.html

पर कार्रवाई में कोड देख सकते हैं, यह केवल फायरफॉक्स, क्रोम, और सफारी में काम करता है। यह आईई 9 में काम नहीं करता है। ब्राउज़र एसवीजी का समर्थन करता है लेकिन Uint8Array नहीं। क्या कोई कामकाजी है?

+0

पृष्ठ पर Google क्रोम फ्रेम का उपयोग करें https://developers.google.com/chrome/chrome-frame/ –

+0

"यह IE9 में काम नहीं करता है" एक त्रुटि संदेश नहीं है - यदि आप के साथ खेलना चाहते हैं तेज चाकू तो आपको वास्तव में कुछ काम करने की ज़रूरत है। – symcbean

उत्तर

27

मुझे पीडीएफ.जेएस लाइब्रेरी के साथ खेलते समय भी एक ही समस्या थी, और मैंने पाया कि समाधान मेरा खुद का Uint8Array है, नीचे कोड है जो आपको चाहिए। सभी क्रेडिट @github notmasteryet में जाता है और पूरा कोड यहां पाया जा सकता https://gist.github.com/1057924

(function() { 
    try { 
    var a = new Uint8Array(1); 
    return; //no need 
    } catch(e) { } 

    function subarray(start, end) { 
    return this.slice(start, end); 
    } 

    function set_(array, offset) { 
    if (arguments.length < 2) offset = 0; 
    for (var i = 0, n = array.length; i < n; ++i, ++offset) 
     this[offset] = array[i] & 0xFF; 
    } 

    // we need typed arrays 
    function TypedArray(arg1) { 
    var result; 
    if (typeof arg1 === "number") { 
     result = new Array(arg1); 
     for (var i = 0; i < arg1; ++i) 
     result[i] = 0; 
    } else 
     result = arg1.slice(0); 
    result.subarray = subarray; 
    result.buffer = result; 
    result.byteLength = result.length; 
    result.set = set_; 
    if (typeof arg1 === "object" && arg1.buffer) 
     result.buffer = arg1.buffer; 

    return result; 
    } 

    window.Uint8Array = TypedArray; 
    window.Uint32Array = TypedArray; 
    window.Int32Array = TypedArray; 
})(); 
+0

बढ़िया! अब मेरा कोड आईई में भी काम करता है। वह एक अच्छा मोड़-कुंजी समाधान था। धन्यवाद। – cleong

+0

@ मिलन जरिक मैंने आपके कोड का उपयोग करने की कोशिश की लेकिन मैं इसे काम नहीं कर सकता। क्या आप मुझे दिखा सकते हैं कि मैं अपने Uint8Array को बदलने के लिए इसका उपयोग कैसे करूं जो सफारी पर काम नहीं कर रहा है .. धन्यवाद ... यह मेरा कोड है। var आवृत्ति डेटा = नया Uint8Array (analyser.frequencyBinCount); यहां मेरा प्रश्न है: http://stackoverflow.com/questions/31629868/web-audio-analyser-not-working-in-safari – Sarah

+0

क्या आप सफारी कंसोल लॉग से त्रुटि प्रदान कर सकते हैं? यह कहना मुश्किल है कि समस्या क्या है क्योंकि मेरे पास आपके कोड का परीक्षण करने के लिए आईओएस नहीं है। –

6

क्या आप संगतता की व्यापक रेंज मिल आश्वासन दिया जा चाहते हैं, आप भी उपयोग कर सकते हैं compatibility.js फ़ाइल पीडीएफ में शामिल "वेब" निर्देशिका के तहत .js वितरण। Mozilla Github से पीडीएफ.जेएस प्राप्त करें, ज़िप संग्रह को कम करें और उपरोक्त निर्देशिका से compatibility.js फ़ाइल शामिल करें। यह पीडीएफ.जेएस लाइब्रेरी का काम भी करता है उदा। IE9

+0

क्या आपके पास विंडोज फोन पर पीडीएफ.जेएस का उपयोग करने के बारे में कोई विचार है? मुझे एक्सएचआर तक पहुंचने में डरावनी समस्याएं आ रही हैं जहां मुझे 'एक्सेस अस्वीकार कर रही है'। मैं अभी भी इसका शोध कर रहा हूं और विभिन्न पथों की कोशिश कर रहा हूं लेकिन उम्मीद है कि आप मुझे wp8.1 के साथ इसका उपयोग करने के बारे में कुछ अंतर्दृष्टि प्रदान करने में सक्षम होंगे – Thierry

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