我对不同浏览器如何在 HTML5 Canvas 上呈现字体大小有疑问。特别是在字体大小不是整数的情况下。例如“8.5px Arial”、“2.23em Arial”等。
对于 canvas.font= FontSize + "px Arial"; 其中 FontSize 是 (8.1, 8.2, 8.3, ...) 我希望得到线性结果,但是唯一始终存档的浏览器是 IE !( 我知道 )。Firefox 四舍五入低于 11.2 像素,但超出此范围是线性的。Chrome 和 Safari 仅将字体缩放为整数值。
舍入规则似乎设置为像素并向下舍入到 0.5 以下最接近的整数
我的画布应用程序正在执行一些程序化动画转换(缩放和翻译)为了提高效率而尝试避免画布转换,尽管我怀疑它会解决问题,但我也没有通过仅使用 CSS3 设置 html 文本大小来测试这一点(即Canvas.font 应该基于规范)
浏览器在 pt、px、em 和 % 字体大小之间的行为至少是一致的。[编辑:除了 Safari 不呈现 % 大小]
[顺便说一句:所有字体一旦放大一点就会看起来有点粗体。当我们从 17.4px 到 17.5px .. BAMB 时,Safari 会拿走那个蛋糕!]
我在下面附上了一些示例图片,但我真的很想了解如何让所有浏览器更像 IE(我从来没想过我会这么说) - 这是一个错误还是渲染字体的标准?
这是我的测试代码,可以为 PX 字体大小的情况复制。
<!DOCTYPE html><html><head><script>
function display() {
var canvas = document.getElementById('test');
// For EM and % cases....
//canvas.style.font="5px Arial";
canvas.height = 1000;
var context = canvas.getContext('2d');
var minSize = 10;
var lineHeight = 100;
for(var a=minSize; a< 20; a+=0.1)
{
var font_size = Math.round(a*10000)/10000;
context.font = a + "px Arial";
context.fillText("A: EXAMPLE TEXT > " + font_size, 20, (font_size-minSize)*lineHeight);
}
}
</script></head><body onload="display()"><canvas id="test"></canvas></body></html>
像素比例 点比例 em 比例 - 1em = 5px Arial 百分比比例 - 100% = 5px Arial