gpt4 book ai didi

svg - 如何使用 SVG 在文本周围绘制一个框?

转载 作者:行者123 更新时间:2023-12-04 11:18:47 24 4
gpt4 key购买 nike

如何使用 SVG 创建一个调整自身大小以适应其中的文本的框( rect ?)?

最佳答案

抱歉,回答花了我这么长时间,但我正在学习如何将 ECMAScript 与 XML DOM 结合使用。

好吧。因此,假设您的文档结构如下所示:

<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"

width="800"
height="600"
id="example_text">

<g id="layer1">

<text
x="123.4"
y="567.8"
id="text_holder">

<tspan id="tspan1">Text</tspan>
<tspan id="tspan2">More text</tspan>

</text>
</g>
<script type="text/ecmascript">

function create_from_rect (client_rect, offset_px) {
if (! offset_px) {offset_px=0;}
var box = document.createElementNS(
document.rootElement.namespaceURI,
'rect'
);

if (client_rect) {
box.setAttribute('x', client_rect.left - offset_px);
box.setAttribute('y', client_rect.top - offset_px);
box.setAttribute('width', client_rect.width + offset_px * 2);
box.setAttribute('height', client_rect.height + offset_px * 2);
}

return box;
}

function add_bounding_box (text_id, padding) {
var text_elem = document.getElementById(text_id);
if (text_elem) {
var f = text_elem.getClientRects();
if (f) {
var bbox = create_from_rect(f[0], padding);
bbox.setAttribute(
'style',
'fill: none;'+
'stroke: black;'+
'stroke-width: 0.5px;'
);
text_elem.parentNode.appendChild(bbox);
}
}
}

add_bounding_box('text_holder', 5);

</script>
</svg>

添加 <script>根底部的标签 <svg> element 在其上方创建 DOM 结构后使其执行,就像网页上的 JavaScript 一样。

关于svg - 如何使用 SVG 在文本周围绘制一个框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3001950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com