2d 上下文中的字体缩放

Posted

技术标签:

【中文标题】2d 上下文中的字体缩放【英文标题】:Font scaling in 2d context 【发布时间】:2018-07-17 19:22:44 【问题描述】:

到目前为止,我已经像这样处理我的 Text 对象:

FontLoader

    id: roboFont;
    source: "qrc:/fonts/RobotoCondensed-Regular.ttf";

...

示例用法,而非 MWE:

Text

    id: theTitle;
    font.pointSize: fontSizeTitle * scale;
    color: col;
    font.family: roboFont.name;
    y: yOffsetTitle * scale;
    font.letterSpacing: fontSpacingTitle * scale;
    anchors.horizontalCenter: parent.horizontalCenter;

我可以轻松设置字体样式并缩放其大小。目前我需要在Canvas 中使用与二维上下文相同的机制。问题在于字体的定义不同,如下所示:

ctx.fillStyle = "white";
ctx.font = "bold 17px sans-serif";
ctx.fillText("Qt Quick", 40, 70);

来源:https://doc.qt.io/qt-5/qtquick-canvas-example.htmlhttps://doc.qt.io/qt-5/qml-qtquick-context2d.html#font-prop

有什么方法可以将字体样式设置为资源中的字体样式并动态缩放?

【问题讨论】:

【参考方案1】:

你可以这样做:

ctx.font = '%1pt %2'.arg(fontSizeTitle * scale).arg(roboFont.name);

如果字体名称包含空格,您还必须引用它:

ctx.font = '%1pt "%2"'.arg(fontSizeTitle * scale).arg(roboFont.name);

对于letterSpacing,在Context2D 中似乎是不可能的:

支持字体的 w3C 2d 上下文标准的子集:

字体样式(可选):正常 |斜体 |斜的 字体变体(可选):正常 |小型股 字体粗细(可选):正常 |粗体 | 0 ... 99 字体大小:Npx | Npt(其中 N 是正数) 字体系列:见http://www.w3.org/TR/CSS2/fonts.html#propdef-font-family

如果确实需要,仍然可以选择手动操作。

【讨论】:

以上是关于2d 上下文中的字体缩放的主要内容,如果未能解决你的问题,请参考以下文章

全网首发:JDK绘制文字:五字体上下文产生流程

Canvas上下文详解

iOS开发-80Quartz2D画图简单介绍:直线/圆形/椭圆/方形以及上下文栈管理CGContextSaveGState/CGContextRestoreGState

canvas基础之变换

canvas API总结

如何更改 AWT 标签字体