html2canvas网页截图不清晰问题

原因分析:

浏览器window中的devicePixelRatio属性决定了浏览器会用几个像素点来渲染一个像素,假设devicePixelRatio=2,在retina屏下,会用2个像素点的宽度去渲染canvas的1个像素点,因此该canvas在retina屏幕上实际占据的宽高放大了一倍,因此图片会变得模糊。

解决:我们可以放大canvas的坐标系,然后缩小其显示的宽高

var getPixelRatio = function(context) {
	var backingStore = context.backingStorePixelRatio ||
		context.webkitBackingStorePixelRatio ||
    	context.mozBackingStorePixelRatio ||
    	context.msBackingStorePixelRatio ||
    	context.oBackingStorePixelRatio ||
    	context.backingStorePixelRatio || 1;
	return (window.devicePixelRatio || 1) / backingStore;
};

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var scaleBy = getPixelRatio(context);
var w = 500;
var h = 500;
canvas.width = w * scaleBy;
canvas.height = h * scaleBy;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
context.scale(scaleBy, scaleBy);
html2canvas(document.getElementById("posterImg"), {
    canvas:canvas,
    onrendered: function(canvas) {
        var dataUrl = canvas.toDataURL();
        var newImg = document.createElement("img");
        newImg.src =  dataUrl;
        newImg.width=w;
        newImg.height=h;
        $("body")[0].appendChild(newImg);
    }
});


猜你喜欢

转载自my.oschina.net/u/879103/blog/760790