【问题标题】:Paper.js PointText Get Baseline Coordinates instead of Bottom Left CornerPaper.js PointText 获取基线坐标而不是左下角
【发布时间】:2016-02-12 02:01:05
【问题描述】:

检查此 Paper.js sketch。单击“文本”以查看边界框。请注意,我将leading 属性设置为与字体大小相同。根据documentation,默认是字体大小的1.2倍。

为什么PointText的底部有边距?如何将其移除以使边界框紧紧地包裹文本?或者,如何确定文本真正基线的 y 值,而不是我们当前给出的值?

编辑

底部的“边距”用于具有降序的字母,例如 q 和 p。所以这里真正的问题是如何获得 PointText 基线的 y 坐标?我特别需要基线,因为这是我们使用的另一个库插入文本的方式,并且插入需要相同。

【问题讨论】:

  • 我建议使用 CSS 中的文本,在画布上使用常规的 html 元素。这通常是最简单的解决方案。
  • @arthur.sw 你如何保持它与允许平移和缩放的画布同步?
  • 好吧,你也可以平移和缩放你的 html 元素......这就是我在 romanesco.city 上所做的

标签: javascript spacing paperjs


【解决方案1】:

间距正确。将“TEXT”更改为“Tejas”,您会看到字符“j”中的下行字符下方的间距与大写字符的顶部相同。

我不相信有办法获取 PointText 项目的文本边界。

因此,我认为 arthur.sw 的建议是最好的答案。除非文本非常简单、单行且不可编辑,否则我也会这样做。我最终在画布上创建了一个文本框或文本区域并适当地定位它。从长远来看,这可能是最好的解决方案;我不确定为什么纸张应该复制浏览器已经处理的所有内容。

有了这个,您需要相对于正在显示的视图或画布定位文本。您可能需要使用globalToLocallocalToGlobal

这是一个sketch,它可以帮助我可视化项目的坐标空间和全局坐标空间之间的关系。

【讨论】:

  • 通过这种方法,是否有任何并行方式可以使用parentToLocal()之类的东西?
  • 我正在编辑答案以尝试回答您的最后一个问题。
【解决方案2】:

根据您的限制,也许您的问题可以通过左上角排列并始终将前导设置为 FontSize 的 95.5% 来解决。对于大多数文本,这应该让你非常接近

【讨论】:

  • “按左上角排列”是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2016-08-28
  • 1970-01-01
  • 2017-09-20
  • 2021-12-18
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多