【发布时间】:2013-03-04 01:41:39
【问题描述】:
我遇到了不同浏览器如何在 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 以下的最接近整数
我的画布应用程序正在执行一些程序化动画转换(缩放和翻译)为了提高效率而尝试避免画布转换,虽然我怀疑它会解决问题,但我也没有通过设置 html 文本大小来测试这一点CSS3(Canvas.font 应该基于规范)
浏览器在 pt、px、em 和 % 字体大小之间的行为至少是一致的。 [编辑:除了 Safari 不呈现 % 大小]
[顺便说一句:所有字体一旦放大一点就会显得有点粗体。当我们从 17.4px 到 17.5px .. BAMB!]
我在下面附上了一些示例图片,但我真的很想了解如何让所有浏览器都更像 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
【问题讨论】:
标签: html animation canvas fonts scale