我有一个程序(基于Java)从数据中生成SVG。用户可以上传他们自己的SVG,这样他们就可以用于我在最终SVG图像中使用的图标和标记。
这是如何工作的,我有一个更大的矩形,我取代了SVG提供的.
<svg xmlns="http://www.w3.org/2000/svg" height="176" version="1.1" viewbox="0 0 264 176" width="264">
<!-- my own stuff -->
<rect x="50" y="50" width="100" height="100" fill="none" class="placeholder" />
</svg>
现在,我可以用其他SVG替换代码中的rect,并添加宽度和高度属性,这样它就可以扩展。
<svg xmlns="http://www.w3.org/2000/svg" height="500" version="1.1" viewbox="0 0 500 500" width="500">
<!-- my own stuff -->
<svg x="50" y="50" width="100" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg">
<!-- inner unknown XML -->
</svg>
</svg>
问题是,如果外部SVG不是正方形(1:1),那么总是会得到水平或垂直方向的偏移量。这可以通过从外部SVG读取viewBox的值来补救,但这些值并不总是存在的。
如果我在Chrome中打开外部SVG,我可以看到宽度和高度的计算值,但是在我的Java代码中,我当然不能访问计算出来的宽度和高度。
我看到的唯一解决方案是强迫用户包含一个viewBox属性。有没有其他解决方案,比如根据元素的(计算)质心定位元素?
发布于 2018-04-28 13:33:30
SVG渲染器用于确定内部大小的完整算法在SVG内容视图的内在大小特性下的规范中,但为了在另一个内嵌svg,可以简化如下:
x
和y
属性将被忽略viewBox
属性,请使用它。否则,
viewBox
of "0 0 <width> height>"
width
和height
设置为占位符值preserveAspectRatio
设置为在视图端口中定位viewBoxhttps://stackoverflow.com/questions/50077024
复制相似问题