背景画像がキャンバス要素にある 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リンクは次のとおりです。
この奇妙な動作の原因は何ですか?