HTML5キャンバスを使用して任意の文字のピクセル密度をjavascriptで取得しようとしましたが、コンテキストgetImageDataは常にピッチの黒い四角形(RGB = [0,0、 0]常に)。fillTextの後にキャンバスピクセルを取得する
誰でも私が間違っていると言ってもらえますか?
var dcanvas = document.getElementById('char-canvas'),
dcontext = dcanvas.getContext('2d');
function fontDensity(c) {
dcanvas.height = 30;
dcanvas.width = 30;
dcontext.clearRect(0, 0, dcanvas.width, dcanvas.height);
dcontext.font = "15px monospace";
dcontext.fillStyle = "black";
dcontext.textAlign = "center";
dcontext.textBaseline = "middle";
dcontext.fillText(c, dcanvas.width/2, dcanvas.height/2);
var imgd = dcontext.getImageData(0, 0, dcanvas.width, dcanvas.height),
pix = imgd.data,
density = 0;
// Read canvas pixels RGBA!
for (var i = 0, n = pix.length; i < n; i += 4) {
density += (pix[i] + pix[i + 1] + pix[i + 2])/3;
}
//density /= pix.length;
return density;
}
console.log(fontDensity("a"));
canvas {
border: 1px solid #000;
display: block;
margin: 20px auto;
}
<canvas id="char-canvas" width="30" height="30"></canvas>
私はどんなバカだった...キャンバスのデフォルトの「色」は白ではない...ありがとう! –