Canvas 上绘制的文本的抗锯齿效果较差
我正在 Canvas 上绘制文本,对抗锯齿的质量感到失望。据我所知,浏览器不会对 Canvas 上的文本进行子像素抗锯齿处理。
这准确吗?
这在 iPhone 和 Android 上尤其明显,生成的文本不像其他 DOM 元素渲染的文本那么清晰。
对于在 Canvas 上输出高质量文本有什么建议吗?
茹伯特
I'm drawing text on Canvas, and am disappointed with the quality of antialiasing. As far as I've been able to determine, browsers don't do subpixel antialising of text on Canvas.
Is this accurate?
This is particularly noticeable on iPhone and Android, where the resulting text isn't as crisp as text rendered by other DOM elements.
Any suggestions for high quality text out put on Canvas?
Joubert
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我的答案来自此链接,也许对其他人有帮助。
http://www.html5rocks.com/en/tutorials/canvas/hidpi/
重要代码如下。
My answer came from this link, maybe it will help someone else.
http://www.html5rocks.com/en/tutorials/canvas/hidpi/
The important code is as follows.
尝试将以下 META 标记添加到您的页面。这似乎解决了我在 iPhone Safari 上遇到的抗锯齿问题:
Try adding the following META tag to your page. This seems to fix anti-aliasing issues I've had on iPhone Safari:
我意识到这是一个老问题,但我今天解决了这个问题并得到了很好的解决。我使用了上面 Alix Axel 的答案,并将我在那里找到的代码(在 web.archive.org 链接上)精简为最基本的内容。
我稍微修改了解决方案,使用两个画布,一个隐藏画布用于原始文本,第二个画布用于实际显示抗锯齿文本。
这是我想出的... http://jsfiddle.net/X2cKa/
代码如下所示;
我还添加了一个比较文本对象,以便您可以看到抗锯齿的工作情况。
希望这对某人有帮助!
I realise this is an old question, but I worked on this problem today and got it working nicely. I used Alix Axel's answer above and stripped down the code I found there (on the web.archive.org link) to the bare essentials.
I modified the solution a bit, using two canvases, one hidden canvas for the original text and a second canvas to actually show the anti-aliaised text.
Here's what I came up with... http://jsfiddle.net/X2cKa/
The code looks like this;
I also added a comparison text object so that you can see the anti-aliasing working.
Hope this helps someone!
已完成一些子像素抗锯齿处理,但这取决于浏览器/操作系统。
之前对此进行了一些讨论,可能会对你有帮助。
我没有 Android 或 iOS 设备,但只是为了好玩,在绘制之前尝试将上下文平移 (.5, 0) 像素,看看这是否会对文本的渲染方式产生影响。
There is some subpixel antialiasing done, but it is up to the browser/OS.
There was a bit of an earlier discussion on this that may be of help to you.
I don't have an android or iOS device but just for kicks, try translating the context by (.5, 0) pixels before you draw and see if that makes a difference in how your text is rendered.