2015-12-02 31 views
0

我正在做一個chrome擴展,它使用chrome.tabs.captureVisibleTab方法來抓取當前選項卡的屏幕截圖,然後顯示在從Chrome擴展的彈出窗口中。如果我使用img標記並使用來自chrome函數的數據(例如data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwME…UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==),則<img>顯示像素完美,它很清晰,這就是我想要的。問題是我需要將它製作成畫布,而當我這樣做時,它變得模糊。如何使HTML5畫布顯示清晰的圖像基於鉻屏幕

This is a screencap of the <img> that uses the link data provided by Google to be used as a comparison to the canvas which is below.

This is the blurry canvas.

這是我使用的嘗試做到這一點的代碼,但我無法弄清楚如何使畫布一樣清脆的圖像。

chrome.runtime.sendMessage({msg: "capture"}, function(response) { 
    console.log(response.imgSrc); 
    var img = document.createElement('img'); 
    var _canvas = document.createElement("canvas"); 
    img.src = response.imgSrc; 
    img.height = 436; 
    img.width = 800; 
    document.getElementById('main-canvas').appendChild(img); 
    draw(response); 
}); 

function draw(response) { 
    var canvas = document.getElementById('imageCanvas'); 
    canvas.height = window.innerHeight; 
    canvas.width = window.innerWidth; 
    //Get a 2d context 
    var ctx = canvas.getContext('2d'); 
    //use image to paint canvas 
    var _image = new Image(); 
    _image.onload = function() { 
     ctx.drawImage(_image, 0, 0, 800, 436); 
    } 
    _image.src = response.imgSrc; 

    document.getElementById('main-canvas').appendChild(canvas); 
} 
+0

我可以看到的是,你正在與436 X 800的漁政船圖片,然後繪製成窗口大小的唯一的事情寬度/高度。你也從0.5px移動圖片。 –

+0

@ManuelChoucino我對此很陌生,所以如果我有東西倒退,我會調整,但我想要做的是從鉻合併全屏大小的screencap,並濃縮到800 * 436的畫布,但我想如鏈接所示,保留相同大小的圖像元素所具有的清晰文本。我不確定這是否有幫助。 –

+0

canvasContext2D對象中有一個選項,名爲[imageSmoothingEnabled](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/imageSmoothingEnabled),默認情況下設置爲true。這仍然被認爲是實驗性的,你需要廠商前綴:'ctx.mozImageSmoothingEnabled = false; ctx.webkitImageSmoothingEnabled = false; ctx.msImageSmoothingEnabled = false; ctx.imageSmoothingEnabled = false;'。此外,它並未得到所有瀏覽器版本(IE9和10)的廣泛支持,因此您可能需要執行自己的最近鄰居算法。 – Kaiido

回答