使用librsvg创建仅包含文本、基于文本大小的宽度和高度的SVG?
我正在尝试创建一个带有单个文本元素的svg。svg的大小应该完全由文本的字体大小决定,并且它应该完全适合文本。我最接近我所寻找的是:使用librsvg创建仅包含文本、基于文本大小的宽度和高度的SVG?,svg,vips,librsvg,Svg,Vips,Librsvg,我正在尝试创建一个带有单个文本元素的svg。svg的大小应该完全由文本的字体大小决定,并且它应该完全适合文本。我最接近我所寻找的是: txt_img = Vips::Image.svgload_buffer %( <svg height="#{font_size}*2"> <g> <text
txt_img = Vips::Image.svgload_buffer %(
<svg height="#{font_size}*2">
<g>
<text
font-family="some value"
font-size="#{font_size}"
font-weight="some value"
fill="some value"
fill-opacity="some value"
stroke="some value"
stroke-width="some value"
dominant-baseline="hanging"
text-anchor="start"
x="0"
y="#{font_size}"
>
#{txt}
</text>
</g>
</svg>
)
txt\u img=Vips::Image.svgload\u缓冲区%(
#{txt}
)
但是,正如您在所附图像中看到的,文本的底部被切断,特别是悬挂在基线下方的字母。如何调整svg的大小以完全适合文本?因为这不是在浏览器环境中呈现的,所以解决方案不能涉及css
还请注意,输出是用Vips呈现的,Vips不提供svg保护程序选项,这就是为什么输出是png格式的
[!][文本呈现为png][1][1]
[1] :你能解释一下你的大目标吗?如果您只想将文本渲染为位图,请查看
Vips::Image.text
,它可能可以执行您想要的操作。@jcupitt我正在尝试完美地重新创建最初在客户端渲染的svg。我尝试使用vips::image.text,问题是我看不到如何让它尊重svg属性,如笔划宽度、笔划颜色和填充颜色,这实际上相当于生成气泡字母。我在svg呈现中遇到的问题似乎是librsvg不解析主要的基线属性。另外,librsvg似乎不支持加载外部字体,而不是文件系统的本地字体,这也是我需要的(我知道vips::image.text支持通过fontfile参数加载字体,但出于上述原因,我同样看不到如何使其支持我的用例)啊,我理解。是的,这听起来很棘手:(