在Lion上的Safari 5.1中,画布上的字体透明度问题?

dc-*_*dc- 3 javascript safari html5 canvas osx-lion

在某些机器上随机出现问题时,canvas元素中的文本将无法在Lion中的Safari 5.1上完全呈现.我的意思是,字母看起来没有透明的背景.这只发生在某些机器上,有时刷新后文本会被清除.我只是使用fillText,它应该只是渲染Arial.

任何人都有同样的问题并能够提出解决方法吗?我试图通过投掷3D变换(旋转等)来触发重绘,但没有运气.

这里的截图(抱歉质量,这是我发送的,但你应该得到的想法)的方式正确的渲染,有时是糟糕的safari渲染:

好 坏

Baz*_*lla 5

这是带有ATI GPU的Mac上的硬件加速问题.

我们在画布上运行相同的代码:我们在装有ATI显卡的Mac上遇到了问题; 相反,在MacMini上(配备英特尔GPU),绘图非常完美.

如果在Safari菜单中的Debug - > Drawing/Compositing标志下选中"Disable Canvas Accelerated Drawing",您会发现文本周围不再出现透明度错误.

Safari 6.0(在Mac OS X 10.7.4上)显示相同的透明度问题.

- 更新 -
经过多次调查,我们可以说这不是GPU问题,而是苹果问题:在LCD显示器上应用"字体平滑"(AppleFontSmoothing设置).

在我们的观察中,我们在两台机器上进行测试:
1 - Mac Mini和飞利浦LCD
2 - iMac(带有自己的LCD显示器)

第一台机器没有显示问题,因为系统算法无法将显示器识别为LCD显示器.
但是使用命令强制使用AppleFontSmoothing,defaults -currentHost write -g AppleFontSmoothing -int 2即使在Mac Mini上也会出现问题.

如果您不希望应用程序再显示问题(保持画布硬件加速),则可以在画布对象上设置'webkitFontSmoothing'属性:

var canvas = document.getElementById('my-canvas');
canvas.style.webkitFontSmoothing = "antialiased"
Run Code Online (Sandbox Code Playgroud)