我想用具有背景图像的画布元素替换所有背景图像并将其绘制到背景图像上的div。使用画布元素替换背景图像的div
我已经掌握了基本的工作原理,但是我很难将background-image
上的div和绘制在画布上的图像之间的图像质量差异化。
这里是我使用这样做代码:
$('#container div').each(function(){
if($(this).css('background-image') != 'none'){
var bgImage = $(this).css('background-image').replace(/^url|[\(\)]/g, '');
var image = new Image();
var attrs = $(this)[0].attributes;
var dimensions = new Array();
var canvas = document.createElement('canvas');
dimensions.push($(this).height())
dimensions.push($(this).width());
$(canvas).attr('width',dimensions[0]);
$(canvas).attr('height',dimensions[1]);
$(canvas).css('background-image', 'none');
for(var i = 0; i < attrs.length; i++){
$(canvas).attr(attrs[i].nodeName,attrs[i].nodeValue);
}
var ctx = canvas.getContext('2d');
image.onload = function() {
ctx.drawImage(image, 0, 0, image.height, image.width);
}
image.src = bgImage;
$(this).replaceWith(canvas);
}
});
下面是结果:
它看起来像图像被拉伸由于某种原因,但我我试图console.log
我在drawImage
使用的图像的宽度/高度和值匹配的图像尺寸。结果仅显示图像的一部分 - 真正的是900x4000像素。
这里是在运行中的问题的jsfiddle链接:
是什么原因造成这种奇怪的行为?
如果您从'drawImage()'调用中移除'image.height'和'image.width'参数,会发生什么? – voithos
然后它只获得正确的高度,看起来更加舒展 - http://i.stack.imgur.com/ZgJci.jpg – boz
您正在测试哪些浏览器并尝试定位?你可以设置一个jsfiddle页面吗? – Rob