【发布时间】:2026-02-13 16:10:01
【问题描述】:
问题:我们需要复制在 RaphaelJS 中创建的 SVG 文本,在 SVG 中具有可变的 font-face、font-size、position、scale、rotation。
但是... Raphael 对文本使用边界框,其高度与字符串的实际高度无关。边界框的高度基于 font-size 和 font-family,但与实际字符串无关。所以一串“Y”和“,”(具有相同的font-face和font-size)具有相同的高度。
当我们在 SVG 中重新创建文本(通过在 PHP 中生成它)时,我们可以得到正确的字体大小和正确的字体系列。然而,SVG 的高度并不独立于实际的字符串。所以“,”的高度会比“Y”低得多。这种高度差异会破坏旋转和定位。
问题:我们如何创建带有“边界框”的 svg,它可以复制 RaphaelJS 的 getBBox(本质上只是调整适合其中任何字符的框的大小),以便我们可以模拟旋转和定位来自 RaphaelJS? 注意:如果有帮助,我们可以为 SVG 转换 text->path。我们还可以访问字体文件。
编辑:问题已通过使用 matrix() 命令并直接转换转换得到解决,而不是应用定位、缩放、然后旋转。
【问题讨论】:
-
精心设计的问题,+1。我只是不明白 PHP 示例中的边界框来自哪里(在 JS 示例中,您使用了 RaphaelJS 函数,那么在右边的示例中,当前使用什么来生成“错误”的边界框?)。
-
+1 也来自我,我也很想知道如何读取 PHP 边界框 (cc @CamiloMartin)。目前我正在使用
inkscape,就像我使用explained here一样,但如果有更好的方法,我会很高兴。
标签: php javascript svg raphael