【发布时间】:2019-11-17 11:41:29
【问题描述】:
我想在 p5.js 画布中制作一个与我的文本紧密贴合的框——这可以做到,但我只能通过将新字体加载到程序中来弄清楚如何做到这一点。
是否可以使用默认字体在文本后面创建一个紧凑的框,从而避免加载新字体?
进一步说明
为了在画布上获得围绕某些文本的紧密框,可以使用textBounds() 方法来获取文本的边界。您将获得与文本紧密贴合的框角的位置。现在,在http://p5js.org/reference/#/p5.Font/textBounds 找到的 p5.js 示例中,我在下面放入了代码片段,看来您必须在使用 textBounds() 之前加载带有 loadFont() 的字体以获取包含文本的框的边界。我的问题是,如何在不加载字体而只使用默认字体的情况下完成此操作?
例如,我必须为下面的“代码片段”使用外部托管的 google 字体。 我宁愿在默认字体后面放一个框,以避免加载某些字体。
let font;
let textString = 'Lorem ipsum dolor sit amet.';
function preload() {
font = loadFont('https://raw.githubusercontent.com/google/fonts/master/ofl/alikeangular/AlikeAngular-Regular.ttf');
}
function setup() {
background(210);
let bbox = font.textBounds(textString, 10, 30, 12);
fill(255);
stroke(0);
rect(bbox.x, bbox.y, bbox.w, bbox.h);
fill(0);
noStroke();
textFont(font);
textSize(12);
text(textString, 10, 30);
}
<script src="https://cdn.jsdelivr.net/npm/p5@0.9.0/lib/p5.min.js"></script>
【问题讨论】:
-
我有一个 p3 方法,它添加了换行符,所以我的文本不会超过包含它的图块。我不确定它是否有帮助,但如果你认为可以,我可以发布它。
-
不,您确实想使用显式字体:不能保证默认字体对于不同的人看起来是一样的,因为 p5 没有预先提供它(它只是依赖于字体名称神奇地存在于人们的计算机上,它甚至无法指示它需要是该字体的哪个版本)。因此,如果您不想使用 google 字体,请将您自己的字体(以 woff2 或较旧的 woff 格式,not ttf 或 otf)托管在与您的页面相同的目录中,而不是在 google 上,并且工作完成了。
-
我在让 p5.js 使用 woff2 时遇到了麻烦,但在旧的 ttf/otf 上没有问题。这是默认行为吗?
标签: javascript fonts processing p5.js opentype