2017-05-24 11 views
5

मेरे पास एक प्रोजेक्ट है जहां मुझे ब्राउज़र में djvu schemas प्रदर्शित करने की आवश्यकता है।ऐरेबफर को ब्लॉब रूपांतरण

मुझे यह पुराना library on Github मिला, जहां तक ​​मुझे समझा गया, djvu फ़ाइलों को bmp में परिवर्तित करता है और फिर उन्हें कैनवास तत्व में डाल देता है।

जैसा कि मैंने कहा, पुस्तकालय पुराना है (अंतिम प्रतिबद्धता 5 साल पहले थी), इसलिए मुझे कुछ सुधार करने की आवश्यकता है। मुख्य समस्या यह है कि lib अप्रचलित BlobBuilder का उपयोग करता है।

कदम मैं इस समस्या को हल करने के लिए बनाया:

  1. दबाव हटाना Chrome DevTools
  2. प्रारंभिक त्रुटि के माध्यम से इस पुस्तकालय लाइन पर है 3774 var c = "undefined" != typeof MozBlobBuilder ? MozBlobBuilder : "undefined" != typeof WebKitBlobBuilder ? WebKitBlobBuilder : console.log("warning: cannot build blobs")
  3. मैं इस लाइन
  4. अगला बाहर टिप्पणी की, मैं बाहर टिप्पणी की लाइन c = new c; और निम्न में से कुछ पंक्तियां भी।

तो, अब यह इस तरह से लग रहा है (चर मैं सरणी बफर, और ololo1 है और ololo2 ऑफसेट किसी तरह का और सीमा हैं)

var c = new Blob(new Uint8Array(new Uint8Array(I,ololo1,ololo2))) 
       , b = b.createObjectURL(c) 
       , c = document.getElementById(kb) 
       , f = c.getContext("2d") 
       , h = new Image 
       , g = a[Ea >> 2] 
       , i = a[Fa >> 2] 
       , j = c.width 
       , k = Math.round(i * j/g); 

      h.onload = function() 
      { 
       var a = g/j; 
       4 < a && (a = 4); 
       1 > a && (a = 1); 
       f.globalAlpha = 1; 

       for (N = 0; N < a; N++) 
        f.drawImage(h, N, N, g - a + N, i - a + N, 0, 0, j, k), 
        f.globalAlpha *= 1 - 1/a; 
       R(h.complete, "Image /bmp.bmp could not be decoded") 
      } 
      ; 
      h.onerror = function(errorMsg, url, lineNumber, column, errorObj) { 
       console.log(errorMsg, url, lineNumber, column, errorObj); 
       console.log("Image /bmp.bmp could not be decoded!") 
      }   
      ; 

और अब मैं त्रुटि पर "छवि/bmp अटक गया। बीएमपी को डीकोड नहीं किया जा सका! "(एच। आतंक हैंडलर में फेंक दिया गया)।

तो, मेरा सवाल है: मैं क्या गलत कर रहा हूं?

+1

मूल था 'c.append (। (नई Uint8Array (नई Uint8Array (मैं, ololo1, ololo2))) बफर): अपने कोड में देख सकते हैं कि आप एक सामान्य सरणी में अपने TypedArray रैप करने के लिए की जरूरत है '। मुझे नहीं पता कि लेखक ने अपने Uint8array को एक नए अंदर क्यों रखा है ... आपको केवल नए 'ब्लॉब ([नया Uint8Array (I, ololo1, ololo2)] के साथ ठीक होना चाहिए "; – Kaiido

+0

@ काइडो कई धन्यवाद, एक आकर्षण की तरह काम करता है। क्या आप इसे उत्तर के रूप में पोस्ट कर सकते हैं? – Rulisp

उत्तर

11

मुझे नहीं पता कि लेखक ने अपने Uint8Array को एक नए में संभवतः अपने बफर की एक प्रति बनाने के लिए क्यों लपेटा था ... ध्यान दें कि मुझे वास्तव में बहिष्कृत ब्लॉबबिल्डर एपीआई नहीं पता है, लेकिन एक टाइपो I

new Blob([new Uint8Array(data)]); 
संबंधित मुद्दे