2013-03-14 117 views
0

我正在尋找一種方法將圖像直接從html5 FileReader API中繪製到畫布上。是否有可能將FileReader readAsArrayBuffer數據轉換爲html5 canvas兼容imageData

通常的方法是創建一個新的圖像對象,等待onload,然後用drawImage()將其繪製到畫布上。

但是,對於一個我不需要進入的特定情況,我希望完全繞過圖像數據的加載。

由於filereader api支持readAsArrayBuffer()我想知道是否有任何方法可以使用此緩衝區並將其轉換爲canvas imageData以便使用ctx.putImageData(array)來渲染圖像。

在此先感謝。

回答

1

加載圖像是我想的必要步驟;在這個過程的一端,你只需要一個二進制blob,它可以是JPEG或PNG(或BMP,任何其他MIME類型),而另一端則有一個包含原始像素數據的數組。雖然您可以自己在技術上對此轉換進行編碼,但fileReader.readAsDataURLctx.drawImage方法可以在內部爲您執行此操作。

FWIW,他是我如何畫一幅畫。

// read binary data from file object 
var fileRead = function(file){ 
    var reader = new FileReader(); 
    reader.onload = fileReadComplete; 
    reader.readAsDataURL(file); 
    }; 

// convert binary data to image object 
var fileReadComplete = function(e){ 
    var img = new Image(); 
    img.src = e.target.result; 
    (function(){ 
     if (img.complete){ 
      ctx.drawImage(img); 
      } 
     else { 
      setTimeout(arguments.callee, 50); 
      } 
     })(); 
    }; 
+0

這幾乎是我如何做到這一點。我玩過使用createimagedata並循環遍歷類型數組,但圖像出現亂碼。這是一個恥辱,因爲這對webworker中的這個特定應用來說是完美的。這將允許能夠發送巨大的圖像給工作人員,而不必克隆它。不管怎麼說,還是要謝謝你。我會盡快將問題標記爲已回答。 – gordyr 2013-03-14 13:13:15

相關問題