为啥文本总是以画布为中心

Posted

技术标签:

【中文标题】为啥文本总是以画布为中心【英文标题】:why is text always centered to canvas为什么文本总是以画布为中心 【发布时间】:2012-10-13 21:08:12 【问题描述】:

加载 SVG 并将其渲染到画布时,路径组中包含的文本始终居中。在下面的示例中,文本应放在左上角。

SVG:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
       viewBox="0 0 269.29 269.29" xml:space="preserve">
<text transform="matrix(1 0 0 1 7.5107 14.2222)" font-family="Arial" font-size="12">Text in the corner</text>
</svg>

JS:

fabric.loadSVGFromURL(uri, function (svg, options) 
            var group = new fabric.PathGroup(svg, options);
            canvas.add(group);
        );

路径组中的任何矩形、圆形等都将按预期显示。那么为什么我的文字没有正确显示呢?

【问题讨论】:

【参考方案1】:

我没有使用过fabric.js,但您可能缺少xy 属性。另外,添加text-anchor="start",这样更容易定位:

<text transform="matrix(1 0 0 1 7.5107 14.2222)" font-family="Arial" font-size="12" text-anchor="start" x="0" y="0">Text in the corner</text>

【讨论】:

请注意,x 和 y 都默认为 0,所以如果这是您想要的,那么您不需要指定这些属性。 但是 OP 正在通过 fabric.js 从 SVG 转换为画布,这可能不是根据规范呈现的(只是一个理论)。 设置文本锚并不能解决我的问题。我怀疑 fabric.js 中的渲染误解了文本元素的翻译。 这里有一个描述问题的小提琴:jsfiddle.net/YA93m/1 文本应该在红色方块内,但已关闭。黑色方块用于确保使用 x 和 y 属性在 PathGroup 中的绝对定位按预期工作。 fabric.js 好像不支持 text-anchor 属性,开票github.com/kangax/fabric.js/issues

以上是关于为啥文本总是以画布为中心的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的文字没有以手机版为中心

HTML5 画布中的中心(比例字体)文本

如何缩放到画布中心,而不是上下文中心

为啥这个 popover segue 以 UITableViewController 为中心?

安卓画布drawText

为啥 JDialog 构造函数不以指定的所有者组件为中心?