javascript
  • html5
  • html5-canvas
  • 2012-08-28 117 views -1 likes 
    -1

    我正試圖在畫布上繪製圖像。該圖像位於html文件的文件夾內。但是當我調用drawImage()函數時,圖像不會繪製。這裏是我的代碼,將圖像繪製到畫布上不起作用

    var upcan = document.createElement("canvas"); 
    upcan.width = "190"; 
    upcan.height = "380"; 
    upcan.style.cssText = 'border-radius:25px; ' 
    var upctx = upcan.getContext('2d'); 
    
    var pb = new Image(); 
    
    pb.onload = function() { 
    upctx.drawImage(pb,0,0,100,400); 
    }; 
    pb.src = "photobooth.png"; 
    var canvasData = upcan.toDataURL("image/png"); 
    
    +0

    [Works fine here](http://jsfiddle.net/eF8HN/)。你有沒有檢查你的開發工具以確保找到'photobooth.png'? – Dennis

    +0

    是的,它非常好! – MJQ

    +0

    問題是當我做upcan.toDataURL(「image/png」);它沒有得到正確的數據!它省略了在pb.onload中完成的所有操作! – MJQ

    回答

    0

    問題出在upcan.toDataURL(「image/png」);.由於安全原因,它不會繪製來自外部的圖像。

    0
    var upcan; 
        var img = d.createElement('img'); 
        var reader = new FileReader(); 
        reader.onload = (function(aImg, aName) { 
         return function(e) { 
         aImg.src = e.target.result; 
         aImg.onload = function(){ 
          var upcan = createImgCanvas(aImg, 100, 400); 
         } 
        }; })(img, file.name); 
        reader.readAsDataURL(file); 
    
    function createImgCanvas(img, imgWidth, imgHeight) { 
        var canvas = document.createElement('canvas'); 
        canvas.width = imgWidth; 
        canvas.height = imgHeight; 
        var imageCanvas2D = canvas.getContext("2d"); 
        try{ 
         imageCanvas2D.drawImage(img, 0, 0, imgWidth, imgHeight); 
        } catch(err) { alert(err);} 
        return canvas; 
    } 
    
    +0

    不能使用filereader。它不適用於I.E. – MJQ

    +0

    這裏有很多代碼和零解釋。 – Dennis

    0

    試試這個:

    var upcan = document.createElement("canvas"); 
    upcan.width = "190"; 
    upcan.height = "380"; 
    upcan.style.cssText = 'border-radius:25px; ' 
    var upctx = upcan.getContext('2d'); 
    
    var pb = new Image(); 
    pb.src = "photobooth.png"; 
    pb.onload = function() { 
    upctx.drawImage(pb,0,0); 
    }; 
    
    +0

    已經試過!不起作用! :( – MJQ

    +0

    提供jsfiddle代碼 –

    0

    首先,你的畫布添加到文檔或任何其他元素?

    +0

    我不需要附加它,我將它保存爲繪圖後的圖像,我也畫了一些其他的畫布到這一個,這工作正常,但圖像繪製不起作用! – MJQ

    +0

    我甚至附加它但是同樣的問題!!! – MJQ

    1

    試試這個代碼...您所提供的src戰平後的圖像,因此現正制定..

    var upcan = document.createElement("canvas"); 
        upcan.width = "190"; 
        upcan.height = "380"; 
        upcan.style.cssText = 'border-radius:25px; ' 
        var upctx = upcan.getContext('2d'); 
    
        var pb = new Image(); 
        pb.src = "~/../urpath/photobooth.png"; //give here proper path 
        pb.onload = function() { 
        upctx.drawImage(pb,0,0,100,400); 
    
        }; 
    

    我認爲這將解決問題烏爾

    +0

    這是在Xamp服務器上 – MJQ

    +0

    這不是問題如果你訪問網站的畫布教程,任何地方src在繪製圖像之後! – MJQ

    +2

    'onload'是異步調用的,你需要設置它*之前*'src'屬性,以確保有文件加載時要調用 – Dennis

    0

    我試着在Chrome瀏覽器的代碼,右邊在此頁面上使用開發人員工具,使用此頁面中現有的圖像之一併將畫布附加到主體。代碼工作得很好,問題必須在其他地方。

    +0

    問題是,當我做canvas.toDataUrl(「圖像/ PNG」);它並沒有把它完全! – MJQ

    0

    負載處理程序異步運行;它將不會執行,直到圖像下載完成。當前腳本將繼續執行,以便在圖像下載之前拍攝畫布的快照。將您的處理移到負載處理程序中,以確保在捕獲之前繪製了所有內容。

    pb.onload = function() { 
        upctx.drawImage(pb,0,0,100,400); 
        var canvasData = upcan.toDataURL("image/png"); 
        // do stuff 
    }; 
    pb.src = "photobooth.png"; 
    
    相關問題